2010-09-29 60 views
3

我想从一个文件中打印出符合java中特定模式的行。 我正在使用Pattern类来做到这一点。正则表达式 - 包括字符串:java

我试图把这个模式设置为“[哈利]”,这样每一个有“哈利”的行都会被打印出来。 但模式总是评估为false。 我的假设是,我输入的正则表达式模式是一个字符串。

我的代码如下:

try { 

     BufferedReader br = new BufferedReader(new FileReader("test.txt")); 
     Pattern p = Pattern.compile("harry"); 
     String str = null; 
     try { 
     while((str = br.readLine())!=null){ 
      Matcher match = p.matcher(str); 
      boolean b = match.matches(); 
      if(b){ 
      System.out.println(str); 
      } 
     } 
     } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 

请帮助。我不明白代码在哪里破坏。我正在尝试不同的模式匹配,但这是做到这一点的正确方法吗?

感谢

回答

7

问题是Matcher.matches必须将整个字符串相匹配。请使用Matcher.find,或者更改模式以允许前导字符和尾随字符。

Pattern p = Pattern.compile(".*harry.*"); 
0

如果你只对匹配的子(相对于更为复杂的模式)感兴趣,你并不需要在所有使用正则表达式。

if (str.contains(substring)) 

但我想你只是简化了这个问题。

相关问题