2010-09-29 126 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)) 

但我想你只是簡化了這個問題。

相關問題