我有一个带字符串的大数组。现在,我需要使用数组中的字符串来形成模式。但是对于带有圆括号的字符串,构造的图案不起作用。谁能指出出了什么问题?谢谢。
这是我的代码:
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());
}
}
}
答案 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)";
答案 2 :(得分:0)
以下不是你想要的:
p = p.replaceAll("\\(", "\\\\(");
您正在使用(
替换\\\\(
。在正则表达式中编译的\\\\(
为\\(
,这基本上意味着逃避\
然后(
,而不是逃避(
。你在寻找的是:
p = p.replaceAll("\\(", "\\(");