搜索文本中的Java RegEx单引号失败模式

时间:2012-10-12 00:18:39

标签: java regex

当我的文字有单引号时,模式会失败。

我试图用\\Q\\E来解决它,就像在Perl中那样但是编译模式失败了。

e.g。

用于模式"(?i)Name is\\b(\\w+)\\b"

如果文字是"My name is Foampile X",我会得到一个匹配。但对于"My name is 'Foampile'"我没有得到匹配。

如果像任何其他角色一样将单引号视为单引号,我该怎么办?

2 个答案:

答案 0 :(得分:1)

我发现在任何情况下你得到一个匹配都很奇怪,因为你在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+'?)"

如果您的问题实际上意味着您只是在没有引号的情况下进行测试,但您的实际目标是仅接受引号中的名称,则可以忽略?后面的所有' { {1}}。

然而,第一个变体将起作用,无论任何非单词字符与句子的其余部分界定名称。

答案 1 :(得分:-1)

\w字符类是任何字母。您将需要扩展您的正则表达式以包含其他可能性:

"Name is [\w']+"

这为正则表达式提供了一组可能的扩展值,包括字母或引号。但是,强制使用正确引用的名称并不精确。这看起来更像是:

"Name is ['"]?[\w']+['"]?"