当我的文本包含单引号时,该模式会失败。
我试图像 Perl 中那样使用 \\Q
和 \\E
来解决它,但模式编译失败。
例如
对于模式“(?i)名称为\\b(\\w+)\\b”
如果文本是“我的名字是 Foampile X”
,我会得到匹配。但对于“我的名字是'Foampile'”
我没有得到匹配。
如何将文本中的单引号视为任何其他字符?
最佳答案
我发现在任何情况下都得到匹配很奇怪,因为您忽略了 Foampile
之前的空格(\b
不消耗字符)。请注意,\w
不匹配引号,而只匹配[a-zA-Z0-9_]
。因此,根据您是否想要包含引号,您可以尝试以下之一:
"(?i)Name is\\W+(\\w+)"
or
"(?i)Name is\\W+?('?\\w+'?)"
如果您想断言名称恰好由一个空格分隔,无论是否加引号,都可以简化为:
"(?i)Name is '?(\\w+)'?"
or
"(?i)Name is ('?\\w+'?)"
并且如果您的问题实际上意味着您只是在不带引号的情况下进行了测试,但您的实际目标是仅接受引号中的名称,那么您可以省略所有这些 ?
在'
后面。
但是,无论任何非单词字符将名称与句子的其余部分分隔开,第一个变体都会起作用。
关于搜索文本中的 Java RegEx 单引号失败模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12850529/