Java +如何将包含'('的字符串替换为'\\('以用于pattern.compile正则表达式[重复]
Posted
技术标签:
【中文标题】Java +如何将包含\'(\'的字符串替换为\'\\\\(\'以用于pattern.compile正则表达式[重复]【英文标题】:Java + How can I replace string containing '(' with '\\(' to for pattern.compile regular expression [duplicate]Java +如何将包含'('的字符串替换为'\\('以用于pattern.compile正则表达式[重复] 【发布时间】:2015-07-25 02:58:55 【问题描述】:我有以下代码
StringToSearchIn ="Hello word (Figure 1)";
patternString= "word (Figure 1)"
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(StringToSearchIn);
matcher.find()
这是返回 0,因为 '( or )'
无法识别,当我更改为
patternString= "word \\(Figure 1\\)"
,将匹配计数器返回为 1 有没有办法将我的 patternString
更改为搜索 '('
并在创建模式之前动态替换为 '\\('
。
提前致谢。
【问题讨论】:
我不确定,但听起来您要求的是匹配“(图 1)”的正则表达式?或者'('后跟任何东西,然后是')'? 谢谢大家,它适用于 Pattern.quote(String regex); 【参考方案1】:使用Pattern#quote(String regex)
:
Pattern pattern = Pattern.compile(Pattern.quote(patternString));
【讨论】:
【参考方案2】:您可以使用 LITERAL 标志。
http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#LITERAL:
启用模式的文字解析。指定此标志时 然后指定模式的输入字符串被视为 文字字符的序列。元字符或转义序列 输入序列不会被赋予特殊含义。
所以在你的代码中:
Pattern pattern = Pattern.compile(patternString, Pattern.LITERAL);
【讨论】:
【参考方案3】:Pattern.quote("$5");
从这个答案:
How to escape text for regular expression in Java
【讨论】:
【参考方案4】:Java 内置了模式转换。
模式是正则表达式的编译表示。 指定为字符串的正则表达式必须首先编译为此类的实例。然后可以使用生成的模式创建一个 Matcher 对象,该对象可以将任意字符序列与正则表达式匹配。执行匹配所涉及的所有状态都驻留在匹配器中,因此许多匹配器可以共享相同的模式。
因此,典型的调用序列是 paternString.replace
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
该类定义了一个matches方法,以方便正则表达式只使用一次。此方法在一次调用中编译一个表达式并匹配一个输入序列。声明
boolean b = Pattern.matches("a*b", "aaaaab");
如果编译没有处理你的括号,你可以添加一个注入字符串替换的方法。
patternString = patternString.replace('(', '\(');
patternString = patternString.replace(')', '\)');
【讨论】:
以上是关于Java +如何将包含'('的字符串替换为'\\('以用于pattern.compile正则表达式[重复]的主要内容,如果未能解决你的问题,请参考以下文章
java开发中如何把字符串中的相同字符替换为不同的字符或字符串?