首页 > 解决方案 > Java 正则表达式:双引号和字边界问题

问题描述

我在匹配以双引号和单词边界结尾的文本时遇到问题。

这是一个例子。

我需要匹配: TEST "A"在一些文本中。

如果我有 aaa TEST "A" aaa它应该匹配的字符串。

aaa TEST "A\"\n也应该匹配

如果我有字符串 aaa TEST "A"aaa,它不应该匹配。

所以我已经像这样定义了我的正则表达式:

.*\bTEST "A"\b.*

问题是

Pattern.matches(".*\\bTEST \"A\"\\b.*", "aaa TEST \"A\" aaa")

返回假

我不明白为什么。我应该对正则表达式进行哪些更改以便匹配?

标签: javaregexword-boundary

解决方案


一个更简单的方法是删除单词边界并在之后测试TEST "A"\s(空格/换行符)。试试这个正则表达式:TEST "A"\s。它适用于您提供的所有案例:

const regex = /TEST "A"\s/;

console.log(regex.test(`aaa TEST "A" aaa`));
//=> true

console.log(regex.test(`aaa TEST "A"\n`));
//=> true

console.log(regex.test(`aaa TEST "A"aaa`));
//=> false

(上面的代码片段在 JavaScript 中,但正则表达式在 Java 中的工作方式相同)


编辑:正如@slartidan 下面建议的那样,如果正则表达式也应该匹配aaa TEST "A",你应该使用这个正则表达式TEST "A"(\s|$)::

const regex = /TEST "A"(\s|$)/;

console.log(regex.test(`aaa TEST "A"`));
//=> true


推荐阅读