Java +如何替换包含'(''与'\'('to for pattern.compile正则表达式的字符串的字符串

时间:2015-05-13 17:14:15

标签: java regex matcher

我有以下代码

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以搜索'('并在创建模式之前动态替换'\\('

提前致谢。

4 个答案:

答案 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)

Pattern.quote("$5");

从这个回答:

How to escape text for regular expression in Java

答案 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(')', '\)');