我写了一个Java程序来在字符串中找到模式“ Type”:“ Value”。这是我写的模式->“ Type [\ W] * Value”。在运行时将“值”替换为实际值 它适用于“ Type”:“ Name”或“ Type”:“ Name <”之类的字符串,但是当我通过括号时,它将失败。
“ Type”:“ Name(”-java.util.regex.PatternSyntaxException:inex附近的未封闭组。
“类型”:“名称()”-找不到匹配项。
我没有太多写正则表达式的经验。有人可以帮我理解这个问题。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
public class PatternFinder {
public static void main(String args[]) {
System.out.println(findPattern("Name","abcd7<","{\"response\":{\"Name\":\"abcd7<\"}}"));
System.out.println(findPattern("Name","abcd7(","{\"response\":{\"Name\":\"abcd7(\"}}"));
}
private static int findPattern(String InputType, String InputValue, String responseString) {
System.out.println("extractEncode" + responseString);
int indexOfInputPattern = -1;
String InputStringPattern = "InputType[\\W]*InputValue";
InputStringPattern = StringUtils.replaceEach(InputStringPattern, new String[] { "InputType", "InputValue" },
new String[] { InputType, InputValue });
System.out.println(InputStringPattern);
if (!StringUtils.isBlank(InputStringPattern)) {
Pattern pattern = Pattern.compile(InputStringPattern);
indexOfInputPattern = indexOf(pattern, responseString);
}
return indexOfInputPattern;
}
private static int indexOf(Pattern pattern, String s) {
System.out.println(pattern.toString()+" "+s);
Matcher matcher = pattern.matcher(s);
return matcher.find() ? matcher.end() : -1;
}
}
答案 0 :(得分:2)
您可以通过在括号前面添加反斜杠来转义括号,也可以使用Pattern.quote来转义不想被解释为Pattern的部分。
了解更多答案 1 :(得分:1)
如果要在正则表达式中搜索括号()
,则必须使用反斜杠\
对其进行转义。因此,您搜索Name\(
。这是因为括号在正则表达式中具有特殊含义。
为了使事情更复杂,\
是Java String
中的一个特殊字符,因此您可能会发现也必须对此进行转义。因此,您的最终表达式可能看起来像Name\\(
。