Java正则表达式:双引号和单词边界问题

时间:2019-01-18 09:18:47

标签: java regex word-boundary

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

这里是一个例子。

我需要匹配: 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")

返回假

我不明白为什么。 我应该做哪个更改来匹配正则表达式?

1 个答案:

答案 0 :(得分:-1)

更简单的方法是删除单词边界,然后测试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中,但是regex在Java中的工作方式相同)


编辑:如下面@slartidan所建议,如果正则表达式也应与aaa TEST "A"相匹配,则应改用此正则表达式:TEST "A"(\s|$)

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

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