java - 尝试执行正则表达式时可能出现反斜杠转义问题

标签 java regex

嗨,我有以下句子,它位于一个更大的字符串变量中:

New Component <b>TEST</b> is successfully registered.

我正在尝试执行正则表达式匹配以在字符串中找到这句话。单词 TEST 是可变的,可以是任何单词。

我在 regexr 中使用以下模式,运行良好:

New Component <b>\w*<\/b> is successfully registered.

在我的java代码中我必须将其写为

Pattern p = Pattern.compile("New Component <b>\\w*<\\/b> is successfully registered.");
Matcher m = p.matcher(result.toString()); 
if (m.matches()) {
  System.out.println("hurray!");
}

这是因为我需要转义反斜杠。然而,该模式在 php 代码中没有收到匹配项,并且没有打印 hurray。反斜杠或我在这里使用它们的方式是否存在导致匹配器失败的问题?

最佳答案

尝试将 .* 添加到模式的开头和结尾:

Pattern p = Pattern.compile(".*New Component <b>\\w*<\\/b> is successfully registered\..*");

您的模式尝试匹配该字符串,但它不会匹配,因为它是较大字符串的一部分,因此目标字符串之前或之后的任何字符都不会被正则表达式接受并导致其失败。

.* 告诉匹配器接受目标字符串前后的 0 个或多个任意字符。

编辑:另外,如果你想匹配行尾的句号,你应该用 \. 转义句号,这是因为点在正则表达式中有特殊的含义,它意味着任何字符。

关于java - 尝试执行正则表达式时可能出现反斜杠转义问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40150389/

相关文章:

java - 使用 Java 对 Apache Commons 守护进程进行单元测试

javascript - 如何匹配括号内的文本或数字?

java - 使用 Java split 计算数学表达式

java - 如何配置避免加入 Javadoc 行的 Eclipse Java 格式?

regex - 在 mongodb 中使用正则表达式

python - Django slug, `\w` 未检测到韩语 + 中文

regex - 将\n 替换为\n' '

java - 如何在嵌套字符串中使用正则表达式进行替换?

java - userVisibleHint 的 getter 和 setter 已弃用,在 Java 中已弃用

java - Hibernate、Collections 和 Session.refresh(...) 的 Stackoverflowerror/Unresolved Object Exception