2012-11-08 70 views
0

我的程序未顯示所需的匹配結果。我的文本文件包含以下行:模式不匹配文本文件中的所有短語

  1. 紅車
  2. 藍色或紅色

所以如果我搜索:「紅車」。我只得到「紅車」是唯一的結果,但我要的是得到如下結果:

  1. 紅車

因爲這些字符串在文本文件中。藍色或紅色,「或」是合乎邏輯的。所以我想匹配他們中的任何一個,而不是兩個。我究竟做錯了什麼? 任何幫助表示讚賞。我的代碼如下:

public static void main(String[] args) { 
     // TODO code application logic here 
     //String key; 
     String strLine; 
     try{ 
    // Open the file that is the first 
    // command line parameter 
    FileInputStream fstream = new FileInputStream("C:\\textfile.txt"); 
    // Get the object of DataInputStream 
    DataInputStream in = new DataInputStream(fstream); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     Scanner input = new Scanner (System.in);   
     System.out.print("Enter Your Search: "); 
     String key = input.nextLine(); 

     while ((strLine = br.readLine()) != null) {  
     Pattern p = Pattern.compile(key); // regex pattern to search for 
     Matcher m = p.matcher(strLine); // src of text to search 
     boolean b = false; 
     while(b = m.find()) { 
     System.out.println(m.start() + " " + m.group()); // returns index and match 
    // Print the content on the console 
     } 
     } 
     //Close the input stream 
    in.close(); 
     }catch (Exception e){//Catch exception if any 
     System.err.println("Error: " + e.getMessage()); 
    } 
    } 
} 
+2

你輸入的是什麼正則表達式? –

+0

我輸入的「紅色車」 –

+2

這就是爲什麼你只有「紅色車」回 –

回答

1

嘗試通過這個正則表達式: -

"((?:Red)?\\s*(?:or)?\\s*(?:Car)?)" 

這將匹配: -

0 or 1紅其次是0 or more空間,然後0 or 1汽車

(?:...)是非捕獲組

注意: -上述正則表達式不匹配: - Car Red

如果您的訂單可能是相反的,那麼你可以使用: -

"((?:Red|Car)?\\s*(?:or)?\\s*(?:Red|Car)?)" 

而且從group(0)採取完全匹配。

E.g: -

String strLine = "Car or Red"; 
Pattern p = Pattern.compile("((?:Red|Car)?\\s*(?:or)?\\s*(?:Red|Car)?)"); 
Matcher m = p.matcher(strLine); // src of text to search 

if (m.matches()) { 
    System.out.println(m.group()); // returns index and match 
} 

輸出: -

Car or Red 

替換您while(b = m.find())if (m.matches()),只要你想匹配的完整的字符串,並且只有一次。

+0

沒有爲我工作 –

+0

對於哪個輸入? –

+0

它爲我工作。你用什麼字符串匹配它? –

-1

你的模式應該是Red|Car

+1

這不匹配'紅車' –

+0

是的,組的將是錯誤的,讓我修復那 – unbeli

+0

現在它會。呵呵 – unbeli

相關問題