不是Alpha字符时的ReplaceAll

时间:2019-07-13 10:54:56

标签: java regex replaceall

当单词在非字母字符(数字,空格...等)之间或字符串的开头或结尾处为$ 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

4 个答案:

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

希望这对您有所帮助:)