java - 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")
返回假
我不明白为什么。我应该对正则表达式进行哪些更改以便匹配?
解决方案
一个更简单的方法是删除单词边界并在之后测试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
推荐阅读
- r - 在管道内有条件并汇总未找到列名
- java - 从 http 端点读取 xml 内容,就像 Java 中的地图一样
- java - 是否有可用作环形列表的 Java LinkedList 方法?
- sql - 如何在 postgresql 中进行 upsert
- office-js - 桌面上加载项 sso 错误 13003,但我是 O365 工作帐户,为什么?
- javascript - 尝试使用自定义内容创建 React Navigation Drawer
- c++ - 从文本文件中分别读取“ab-”之类的单词并删除
- docker - 为什么 Dockerfile 构建但不能正常工作,即使它是手动工作的?
- sql - current_timestamp 红移
- c++ - 在引用结构中的指针时是否可以使用“cin”?