2014-02-28 6 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

Следующее не делает то, что вы нт:

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

Вы заменяете ( с \\\\(. \\\\( составлено в регулярном выражении \\(, что в основном означает побег \, а затем (, а не (. То, что вы ищете следующее:

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

Я пробовал это. Он не работает :( – user3321400

Смежные вопросы