我有一个小日记,我允许用户评论我发布的内容,并将某些字符转换为表情符号。
所以:)成为图片<img src='\smiley\smile.png' />
并且:d 变为<img src='\smiley\big-smile.png' />
,依此类推。
现在,最近,我的一个朋友发布了一个教育链接,其中有一个:d
的网址,我的笑脸正则表达式跳转到链接并将其分成几块,带有一个大笑脸图像。
你明白了。
所以我将我的正则表达式从:d
更改为\b:d\b
并期望它匹配整个单词,如果:d
本身就是全部。你猜怎么着?正则表达式现在没有了。
here is a sample demonstration of what I am talking about
如何使正则表达式仅与:d
匹配?感谢。
答案 0 :(得分:3)
那是因为\b
匹配单词边界。当你将它放在:d
后面时它会起作用,因为d
被认为是一个单词。 :
不被视为单词字符,因此不是单词边界。用空格或锚点的lookbehind修复它:
(?<=^|\s):d\b
编辑:正如Bob Vale指出的那样,如果您匹配像:/
这样的笑脸,这也适用,/
不会触发单词边界。你必须做同样的事情,但有一个前瞻:
(?<=^|\s):d(?=$|\s)
答案 1 :(得分:1)
你需要使用look back并在字符串和空格的开头/结尾处向前看匹配,因为你想要匹配的字符不一定会触发通常的字边界规则。
使用(?<=^|\s):d(?=$|\s)
此模式适用于所有匹配项,例如(?<=^|\s):\)(?=$|\s)