2014-02-28 45 views
1

我有一個帶有字符串的大數組。現在,我需要使用數組中的字符串來形成模式。但是對於帶有圓括號的字符串,構造的模式不起作用。任何人都可以指出什麼是錯的?謝謝。檢測圓括號的正則表達式

這裏是我的代碼:

String[] phrases = new String[2]; 
    phrases[0] = "student (male)"; 
    phrases[1] = "worker (female)"; 

    Pattern[] ptn = new Pattern[phrases.length]; 

    int i = 0; 
    for (String p : phrases) 
    { 
     p = p.replaceAll("\\(", "\\\\("); 
     p = p.replaceAll("\\)", "\\\\)"); 
     System.out.println(p); 
     ptn[i] = Pattern.compile(p+"\\:\\s\\w+"); 
     i++; 
    } 

    String text = "Student (male): John"; 

    for(Pattern p : ptn) 
    { 
     Matcher m = p.matcher(text); 
     while(m.find()) 
     { 
      System.out.println(m.group()); 
     } 
    } 

} 

回答

1

,如果你對測試匹配的字符串 :)

你的問題是,它絕對應該很好地工作...... "Student (male): John"開始與大寫S,並且您正在嘗試匹配小寫字母s。這很簡單!

順便說一句,我也想指出,你可以更換線路:

p = p.replaceAll("\\(", "\\\\("); 
p = p.replaceAll("\\)", "\\\\)"); 

只需使用:

p = Pattern.quote(p); 

乾杯!

+0

它的工作原理!謝謝! – user3321400

0

由於線String text = "Student (male): John";不與正則表達式匹配student \(male\)\:\s\w+

text = "student (male): John";或前半句字符串替換輸入文字phrases[0] = "Student (male)";

例如在Ideone

+0

這只是一個錯字。不是實際的問題。 – user3321400

+0

@ user3321400:事實上,錯字是代碼中的問題,而不是正則表達式。 –

+0

哦,你說得對。謝謝! – user3321400

0

以下是不是你在做什麼NT:

p = p.replaceAll("\\(", "\\\\("); 

您與\\\\(更換(。編譯爲正則表達式的\\\\(\\(,其基本意思是轉義\,然後(,而不是轉義(。你要找的是以下內容:

p = p.replaceAll("\\(", "\\("); 
+0

我試過這個。它不起作用:( – user3321400