java - 在replaceAll正则表达式中使用\b

标签 java regex pattern-matching replaceall

我想替换字符串中与给定模式匹配的文本。我编写了下面的 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/

相关文章:

java - 使用java : list. item(i).getFirstChild()遍历xml DOM

java - 如何判断一个字符串是英文句子还是代码?

python - 将特定单词后的单词提取为列表

regex - 如何使用正则表达式将所有内容移动到 Notepad++ 中的一行

r - 在 R 中提取模式周围的行

java - 从用户定义函数 JOOQ 查询

java - 如何在 Jboss AS 中部署和运行多个 war 部署

java - 需要允许字母数字和 3 个特殊字符 - 的模式。空白

scala - 是否可以对变量使用 match scala 操作?

haskell - 为什么我不能根据 Haskell 中的比率进行模式匹配?