正则表达式匹配整个单词不起作用
为新秀问题道歉。
我有一个小日记,我让用户评论我发布的内容并将某些字符转换为表情符号。
所以🙂成为一个图像并且:d变为
等等。
现在,最近,我的一个朋友发布了一个教育链接,其中有一个:d
在url中,我的笑脸正则表达式跳转到链接并将其分成碎片,带有一个大笑脸图像。
你得到了想法。
所以我把我的正则表达式改为:d
到\b:d\b
并且期望它匹配整个单词,如果:d
完全是单独的。 你猜怎么着? 正则表达式现在没有了。
这里是我所谈论的示例演示
我如何让正则表达式只匹配:d
自己? 谢谢。
您将需要使用后面的观察并在字符串和空白的开头/结尾处向前看匹配,因为您尝试匹配的字符不一定会触发通常的单词边界规则。
使用(?<=^|\s):d(?=$|\s)
此模式适用于所有匹配,例如(?<=^|\s):\)(?=$|\s)
那是因为\b
匹配单词边界。 当你把它放在:d
后面时它会起作用,因为d
被认为是一个单词。 :
不被视为单词字符,因此不是单词边界。 用空格或锚点的lookbehind修复它:
(?<=^|\s):d\b
编辑:正如Bob Vale指出的那样,如果你匹配一个笑脸,这也适用:/
, /
不会触发一个单词边界。 你必须做同样的事情,但有一个前瞻:
(?<=^|\s):d(?=$|\s)