我在匹配以双引号和单词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")
返回假
我不明白为什么。 我应该做哪个更改来匹配正则表达式?
答案 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