正则表达式匹配整个单词不工作
本文关键字:单词不 工作 正则表达式 | 更新日期: 2023-09-27 18:03:14
为新手问题道歉。
我有一个小日志,我让用户评论我发布的东西,并将某些字符转换为笑脸。
so :)变为图像<img src=''smiley'smile.png' />
:d变为<img src=''smiley'big-smile.png' />
,依此类推
现在,最近,我的一个朋友发布了一个教育链接,在url中有一个:d
,我的smiley regex跳到链接并将其分解成碎片,带有一个大大的微笑图像。
你明白了。
因此,我将正则表达式从:d
更改为'b:d'b
,并期望它匹配整个单词,如果:d
是单独的。你猜怎么着?
下面是我所讲内容的示例演示
我如何让正则表达式只匹配:d
本身?谢谢。
这是因为'b
匹配单词边界。当您将它放在:d
后面时,它可以工作,因为d
被认为是一个单词。:
不被认为是单词字符,因此不是单词边界。用留白或锚来修复它:
(?<=^|'s):d'b
编辑:正如Bob Vale指出的,这也适用于如果你匹配像:/
这样的笑脸,/
不会触发字边界。你必须做同样的事情,但是要向前看:
(?<=^|'s):d(?=$|'s)
您将需要对字符串的开始/结束和空白使用向后查找和向前查找匹配,因为您试图匹配的字符不一定会触发通常的单词边界规则。
使用(?<=^|'s):d(?=$|'s)
此模式应该适用于所有匹配例如(?<=^|'s):')(?=$|'s)