用于检测圆括号的正则表达式

时间:2014-02-28 08:12:43

标签: java regex

我有一个带字符串的大数组。现在,我需要使用数组中的字符串来形成模式。但是对于带有圆括号的字符串,构造的图案不起作用。谁能指出出了什么问题?谢谢。

这是我的代码:

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());
        }
    }

}

3 个答案:

答案 0 :(得分:1)

它应该运行良好... 如果你测试匹配的字符串:)

您的问题是"Student (male): John"大写 S开头,并且您尝试匹配小写 s 。这很简单!

顺便说一句,我还要指出你可以替换这些行:

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

只需使用:

p = Pattern.quote(p);

干杯!

答案 1 :(得分:0)

因为第String text = "Student (male): John";行与正则表达式student \(male\)\:\s\w+

不匹配

将输入文字替换为text = "student (male): John";或第一个短语字符串为phrases[0] = "Student (male)";

Ideone

上的示例

答案 2 :(得分:0)

以下不是你想要的:

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

您正在使用(替换\\\\(。在正则表达式中编译的\\\\(\\(,这基本上意味着逃避\然后(,而不是逃避(。你在寻找的是:

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