当单词在非字母字符(数字,空格...等)之间或字符串的开头或结尾处为$ 0时,我需要替换单词中所有出现的单词。但是,当我使用replaceAll时,我的Regex模式似乎不起作用。
我尝试了一些在Web上找到的解决方案,例如Pattern.quote,但是该模式似乎不起作用。但是,它可以在https://regexr.com/
上完美运行public static final String REPLACE_PATTERN = "(?<=^|[^A-Za-z])(%s)(?=[^A-Za-z]|$)";
String patternToReplace = String.format(REPLACE_PATTERN, "a");
inputString = inputString.replaceAll(Pattern.quote(patternToReplace), "$0");
例如,使用字符串和单词“ a”:
a car4is a5car
我希望输出为:
$0 car4is $05car
答案 0 :(得分:0)
Pattern.quote()
返回正则表达式文字,中间的所有内容均为treated like a text。
您应该使用Matcher
替换所有出现的字符串。除此之外,正如@Donat所指出的,$0
被视为正则表达式变量,因此您需要对其进行转义。
inputString = Pattern.compile(patternToReplace).matcher(inputString).replaceAll("\\$0");
答案 1 :(得分:0)
当您要用"$0"
替换字符串的匹配部分时,必须编写它
"\\$0"
。这是因为$0
具有特殊含义:匹配的字符串。因此,您可以自行替换字符串。
答案 2 :(得分:0)
您引用的是错误的内容。您不应该引用该模式。您应该引用signIn() {
if (isMobile) {
mobileGoogleSignIn();
} else {
googleSignIn();
}
}
-模式中应按字面意义处理的部分。
"a"
如果您永远不会在String patternToReplace = String.format(REPLACE_PATTERN, Pattern.quote("a"));
的第二个参数中放置其他任何字母,那么您根本不需要format
,因为字母在正则表达式中没有特殊含义。 / p>
此外,quote
在用作替换项时具有特殊含义,因此您需要对其进行转义:
$
答案 3 :(得分:0)
只需从inputString.replaceAll(Pattern.quote(patternToReplace), "$0");
更改为inputString.replaceAll(patternToReplace, "\\$0");
我已经使用以下代码进行了测试:
public static final String REPLACE_PATTERN = "(?<=^|[^A-Za-z])(%s)(?=[^A-Za-z]|$)";
String patternToReplace = String.format(REPLACE_PATTERN, "a");
inputString = inputString.replaceAll(patternToReplace, "\\$0");
System.out.println(inputString);
输出:
$0 car4is $05car
希望这对您有所帮助:)