我想替换字符串中与给定模式匹配的文本。我编写了下面的 Java 代码来执行此操作。
public static void main(String[] args) {
/* Block 1 */
String s1="123 Test Testing";
System.out.println(s1.replaceAll("\\bTest\\b", "<Replaced with Test Message>")); // Prints 123 <Replaced with Test Message> Testing
/* Block 2 */
String s2="123 Test] Test]ing";
System.out.println(s2.replaceAll("\\bTest\\]\\b", "<Replaced with Test Message>")); //Prints 123 Test] <Replaced with Test Message>ing
}
第一个 block 正在按预期工作。但在第二个 block 中,它不是替换字符串开头的 Test]
,而是替换 Test]ing
的一部分。
代码或正则表达式有什么问题吗?
如何匹配 Test]
而不是 Test]ing
Test]
最佳答案
正则表达式中的\b 匹配单词边界,即单词\w 和非单词\W 字符之间的位置。由于模式中的 ] 是非单词字符,因此第一个位置 (Test] ) 中不存在带有以下空格的单词边界,但在第二个位置 (Test]ing) 中不存在单词边界,其中 ] 后跟字字符i。
为了匹配第一个测试],您可以将正则表达式更改为
"\\bTest\\]\\B"
匹配]之后的非单词边界。
关于java - 在replaceAll正则表达式中使用\b,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42508517/