Matcher.replaceAll - 在$,\ Ch替换字符串

tha*_*guy 3 java regex

所以我只是遇到了一个很好的边缘情况,replaceAll如果替换String中有一个$或\,那么对一个字符串进行操作就会阻塞.

为什么替换字符串不只是替换为我指定的正则表达式的匹配?我在这里对正则表达式的理解是什么?

Oracle Java 7文档引用:

public String replaceAll(String replacement)

将具有给定替换字符串的模式匹配的输入序列的每个子序列替换.

此方法首先重置此匹配器.然后它扫描输入序列以查找模式的匹配.不属于任何匹配项的字符将直接附加到结果字符串; 结果中的每个匹配都被替换字符串替换.替换字符串可能包含对appendReplacement方法中捕获的子序列的引用.

请注意,替换字符串中的反斜杠(\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同.如上所述,美元符号可被视为对捕获的子序列的引用,反斜杠用于替换替换字符串中的文字字符.

Boh*_*ian 6

美元符号是一个特殊的字符; 你必须逃脱它:

"\\$"
Run Code Online (Sandbox Code Playgroud)

注意双反斜杠 - 这是你在java中编写单个反斜杠的方式,这意味着\$传递给replace方法.

美元符号表示对捕获组的后向引用:

"$1" // replace with group 1
"$2" // replace with group 2
Run Code Online (Sandbox Code Playgroud)

还有一个特殊的第0组:

"$0" // replace with the entire match
Run Code Online (Sandbox Code Playgroud)