【发布时间】:2017-02-28 12:14:34
【问题描述】:
我想替换与给定模式匹配的字符串中的文本。我在下面编写了 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
}
第一个块按预期工作。但是在第二个块中,它不是替换字符串开头的Test],而是替换Test]ing的一部分。
代码或正则表达式有什么问题吗?
如何匹配Test] 而不是Test] 的Test]ing
【问题讨论】:
-
所有正确(您的正则表达式完全没有问题,它们按预期工作)。我认为你需要使用
"(?<!\\S)Test\\](?!\\S)"。 -
@WiktorStribiżew 更新了代码。使用此代码,您的解决方案将失败。
-
“失败”是什么意思?我的建议非常有效 - regex101.com/r/w1wXqd/1
-
感谢@WiktorStribiżew。但是为什么相同的正则表达式在 javascript 中不起作用?
-
因为正则表达式与 JavaScript 正则表达式引擎不兼容。您的问题带有 JAVA 标记。
标签: java regex pattern-matching replaceall