ReplaceAll 当它不是字母字符时
ReplaceAll when it is not alpha characters
我需要替换字符串中所有出现在非字母字符(数字、空格等)之间或字符串开头或结尾的单词,以获得 $0。但是,当我使用 replaceAll 时,我的正则表达式模式似乎不起作用。
我尝试了在网上找到的几种解决方案,例如 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), "[=10=]");
例如,字符串和单词 "a":
a car4is a5car
我希望输出为:
[=12=] car4is car
Pattern.quote()
returns 正则表达式文字和一切 in-between 是 treated like a text.
您应该使用 Matcher
来替换所有出现的字符串。除此之外,正如 @Donat 所指出的,[=13=]
被视为正则表达式变量,因此您需要对其进行转义。
inputString = Pattern.compile(patternToReplace).matcher(inputString).replaceAll("\[=10=]");
当你想用"[=10=]"
替换字符串的匹配部分时,你必须写
"\[=11=]"
。这是因为 [=12=]
有特殊的含义:匹配字符串。所以你自己替换字符串。
你引用错了。你不应该引用模式。您应该引用 "a"
- 模式中应该按字面意思 .
处理的部分
String patternToReplace = String.format(REPLACE_PATTERN, Pattern.quote("a"));
如果你永远不会在 format
的第二个参数中放置任何其他字母,那么你根本不需要 quote
,因为字母在正则表达式中没有特殊含义.
另外,$
作为替换有特殊含义,需要转义:
inputString = inputString.replaceAll(patternToReplace, "\[=11=]");
只需从 inputString.replaceAll(Pattern.quote(patternToReplace), "[=12=]");
更改为 inputString.replaceAll(patternToReplace, "\[=13=]");
我已经用这段代码测试过:
public static final String REPLACE_PATTERN = "(?<=^|[^A-Za-z])(%s)(?=[^A-Za-z]|$)";
String patternToReplace = String.format(REPLACE_PATTERN, "a");
inputString = inputString.replaceAll(patternToReplace, "\[=10=]");
System.out.println(inputString);
输出:
[=11=] car4is car
希望对您有所帮助:)
我需要替换字符串中所有出现在非字母字符(数字、空格等)之间或字符串开头或结尾的单词,以获得 $0。但是,当我使用 replaceAll 时,我的正则表达式模式似乎不起作用。
我尝试了在网上找到的几种解决方案,例如 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), "[=10=]");
例如,字符串和单词 "a":
a car4is a5car
我希望输出为:
[=12=] car4is car
Pattern.quote()
returns 正则表达式文字和一切 in-between 是 treated like a text.
您应该使用 Matcher
来替换所有出现的字符串。除此之外,正如 @Donat 所指出的,[=13=]
被视为正则表达式变量,因此您需要对其进行转义。
inputString = Pattern.compile(patternToReplace).matcher(inputString).replaceAll("\[=10=]");
当你想用"[=10=]"
替换字符串的匹配部分时,你必须写
"\[=11=]"
。这是因为 [=12=]
有特殊的含义:匹配字符串。所以你自己替换字符串。
你引用错了。你不应该引用模式。您应该引用 "a"
- 模式中应该按字面意思 .
String patternToReplace = String.format(REPLACE_PATTERN, Pattern.quote("a"));
如果你永远不会在 format
的第二个参数中放置任何其他字母,那么你根本不需要 quote
,因为字母在正则表达式中没有特殊含义.
另外,$
作为替换有特殊含义,需要转义:
inputString = inputString.replaceAll(patternToReplace, "\[=11=]");
只需从 inputString.replaceAll(Pattern.quote(patternToReplace), "[=12=]");
更改为 inputString.replaceAll(patternToReplace, "\[=13=]");
我已经用这段代码测试过:
public static final String REPLACE_PATTERN = "(?<=^|[^A-Za-z])(%s)(?=[^A-Za-z]|$)";
String patternToReplace = String.format(REPLACE_PATTERN, "a");
inputString = inputString.replaceAll(patternToReplace, "\[=10=]");
System.out.println(inputString);
输出:
[=11=] car4is car
希望对您有所帮助:)