我正在使用以下正则表达式字符串来匹配位于一组其他单词中的单词“ kohls”。
\W*((?i)kohls(?-i))\W*
单独使用该单词时效果很好,但是如果该单词位于url中,则匹配项的两端都包含句点。
请参见以下示例:
Thank you for shopping at Kohls
-返回kohls的匹配项。
https://www.kohls.com
-返回 .kohls的匹配项。
我希望它只提取与科尔斯不符的精确匹配项,也不提取其前后的任何其他符号/文本。你能告诉我我在做什么错吗?
答案 0 :(得分:4)
在这种情况下,您始终可以使用regex101.com之类的站点,该站点解释正则表达式并用颜色显示匹配项。因此,这就是您的正则表达式当前的工作方式:
如您以蓝色颜色看到的那样,点的问题在于\W*
,它与任何非单词字符都匹配。为了解决这个问题,您可以使用以下正则表达式:
\b((?i)kohls(?-i))\b
\b
(要匹配的单词之前和之后)用于声明单词边界处的位置。立即查看该网站的工作原理:
如果您仍有疑问,请查看该网站提供的正则表达式的解释。值得一看。
答案 1 :(得分:0)
\W
元字符用于查找non-word characters。因此,添加star operator将匹配0个或多个这些非单词字符(如句点)。您是否打算添加word boundary?
\b(?i)kohls(?-i)\b
答案 2 :(得分:-1)
将\W*
替换为[\W,\.\-]*
等。
应该足够。