猿问

ReplaceAll 当它不是字母字符时

我需要替换字符串中所有出现的单词,当它位于非字母字符(数字、空格等)之间或字符串的开头或结尾时 $0。但是,当我使用 replaceAll 时,我的 Regex 模式似乎不起作用。


我尝试了几种在网上找到的解决方案,例如 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


慕妹3146593
浏览 148回答 4
4回答

汪汪一只猫

只需从更改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希望这对你有帮助:)

largeQ

你引用了错误的东西。你不应该引用模式。您应该引用"a"- 模式中应该按字面意义对待的部分。String&nbsp;patternToReplace&nbsp;=&nbsp;String.format(REPLACE_PATTERN,&nbsp;Pattern.quote("a"));如果您永远不会在 的第二个参数中放置任何其他字母format,那么您根本不需要quote,因为字母在正则表达式中没有特殊含义。此外,$用作替换时具有特殊含义,因此您需要对其进行转义:inputString&nbsp;=&nbsp;inputString.replaceAll(patternToReplace,&nbsp;"\\$0");

喵喵时光机

Pattern.quote()返回正则表达式文字,中间的所有内容都被视为文本。您应该使用Matcher替换所有出现的字符串。除此之外,正如@Donat指出的那样,$0它被视为正则表达式变量,因此您需要对其进行转义。inputString&nbsp;=&nbsp;Pattern.compile(patternToReplace).matcher(inputString).replaceAll("\\$0");

SMILET

当你想用替换字符串的匹配部分时"$0",你必须写它"\\$0"。这是因为$0有一个特殊的含义:匹配字符串。所以你自己替换字符串。
随时随地看视频慕课网APP

相关分类

Java
我要回答