我有以下代码
StringToSearchIn ="Hello word (Figure 1)";
patternString= "word (Figure 1)"
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(StringToSearchIn);
matcher.find()
当我更改为时,由于'( or )'
无法识别,因此返回0
patternString= "word \\(Figure 1\\)"
,将匹配计数器返回为1是否有办法更改我的patternString
以搜索'('
并在创建模式之前动态替换'\\('
。
提前致谢。
答案 0 :(得分:2)
使用Pattern#quote(String regex)
:
Pattern pattern = Pattern.compile(Pattern.quote(patternString));
答案 1 :(得分:2)
您可以使用LITERAL标志。
http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#LITERAL:
启用模式的文字解析。指定此标志时 然后指定模式的输入字符串被视为a 文字字符序列。中的元字符或转义序列 输入序列没有特殊含义。
所以在你的代码中:
Pattern pattern = Pattern.compile(patternString, Pattern.LITERAL);
答案 2 :(得分:0)
答案 3 :(得分:0)
Java内置了模式转换。
模式是正则表达式的编译表示。 必须首先将指定为字符串的正则表达式编译为此类的实例。然后,可以使用生成的模式创建一个Matcher对象,该对象可以将任意字符序列与正则表达式进行匹配。参与执行匹配的所有状态都驻留在匹配器中,因此许多匹配器可以共享相同的模式。
典型的调用序列因此是paternString.replace
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
匹配方法由此类定义,以方便正常表达式仅使用一次。此方法编译表达式并在单个调用中将输入序列与其匹配。声明
boolean b = Pattern.matches("a*b", "aaaaab");
如果compile没有处理你的括号,你可以添加一个注入字符串替换的方法。
patternString = patternString.replace('(', '\(');
patternString = patternString.replace(')', '\)');