在替换所有正则表达式中使用\ b
问题描述:
我想替换与给定模式匹配的字符串中的文本。我写下面的Java代码来做到这一点。在替换所有正则表达式中使用 b
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
}
第一个模块按预期工作。但在第二块中,不是替换字符串开始处的Test]
,而是取代Test]ing
的一部分。
代码或正则表达式有什么问题吗? 如何匹配Test]
Test]
代替Test]ing
答
您需要从第二块比它做工精细除去正则表达式。 :)
System.out.println(s2.replaceAll("Test\\]", "<Replaced with Test Message>")); //Prints Test] <Replaced with Test Message>ing
OUTPUT:
<Replaced with Test Message> <Replaced with Test Message>ing
+0
请阅读问题。我必须匹配测试],它出现在字符串的开头。不是某个词的部分。 –
答
的\ b在您的正则表达式字 - 边界,即一个字\ w和非单词\ W字符之间的位置匹配。由于您的模式中的]是非单词字符,所以在第一个位置(Test)中不存在单词边界,但以下空格,但在第二个位置(Test] ing),其中]后面是字字符我。
要匹配的第一个测试]你可以将您的正则表达式改变
"\\bTest\\]\\B"
匹配]后非单词边界。
答
\b
是Java正则表达式中的word boundary。 它适用于仅包含“any lowercase letter, any uppercase letter, the underscore character, or any digit”的单词,即[a-zA-Z_0-9] 根据此测试]是不是一个字和\b
不能为它工作。
所有正确的(与您的正则表达式没有任何问题,他们按预期工作)。我认为你需要使用'“(?
@WiktorStribiżew更新了代码。使用此代码,您的解决方案失败。 –
“失败”是什么意思?我的建议完美无缺 - https://regex101.com/r/w1wXqd/1 –