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开发中如何把字符串中的相同字符替换为不同的字符或字符串?

Java如何检测替换4个字节的utf-8编码(此范围编码包含emoji)

java字符串位置定位并调换位置的问题

java如何实现替换指定位置的指定字符串的功能

Java:将 \" 替换为 " 和 \/ 替换为 /

如何在Java中替换Char表中的字符