Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
搜索文本模式中的Java正则表达式单引号失败_Java_Regex - Fatal编程技术网

搜索文本模式中的Java正则表达式单引号失败

搜索文本模式中的Java正则表达式单引号失败,java,regex,Java,Regex,当我的文本有单引号时,模式失败 我试图像在Perl中一样使用\\Q和\\E来解决它,但未能编译该模式 e、 g 对于模式?iName是\\b\\w+\\b 如果文本是我的名字是Foampile X,我得到一个匹配。但是因为我的名字叫“泡沫堆”,我没有找到匹配的 如何将文本中的单引号视为任何其他字符?字符类是任何字母。您需要扩展正则表达式以包含其他可能性: "Name is [\w']+" 这为正则表达式提供了一组可能要扩展的值,包括字母或引号。然而,强制使用正确引用的名称并不是精确匹配。这看起

当我的文本有单引号时,模式失败

我试图像在Perl中一样使用\\Q和\\E来解决它,但未能编译该模式

e、 g

对于模式?iName是\\b\\w+\\b

如果文本是我的名字是Foampile X,我得到一个匹配。但是因为我的名字叫“泡沫堆”,我没有找到匹配的

如何将文本中的单引号视为任何其他字符?

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

"Name is [\w']+"
这为正则表达式提供了一组可能要扩展的值,包括字母或引号。然而,强制使用正确引用的名称并不是精确匹配。这看起来更像:

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

我觉得奇怪的是,在任何情况下都会得到匹配,因为在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+'?)"
如果你的问题实际上意味着你只进行了没有引号的测试,但你的实际目标是只接受引号中的名字,那么你可以忽略所有这些吗?在'后面'


但是,无论是否有任何非单词字符将名称与句子的其余部分分隔开来,第一个变体都会起作用。

单词边界是单词字符A-Za-z0-9_uu和非单词字符A-Za-z0-9_u之间的边界。因此,您的正则表达式无法工作。如果我的名字是“Foampile”,您希望匹配什么?空格和“请正确测试并编写正则表达式”。您还忘记了捕获组。您可以在正则表达式中提供错误吗?虽然它是从OP的原始正则表达式简化而来的,但是我试图展示它的区别。似乎没有理由投反对票。。。