正则表达式匹配整个单词不起作用

时间:2011-07-22 13:04:04

标签: c# regex

对于新秀问题道歉。

我有一个小日记,我允许用户评论我发布的内容,并将某些字符转换为表情符号。

所以:)成为图片<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匹配?感谢。

2 个答案:

答案 0 :(得分:3)

那是因为\b匹配单词边界。当你将它放在:d后面时它会起作用,因为d被认为是一个单词。 :不被视为单词字符,因此不是单词边界。用空格或锚点的lookbehind修复它:

(?<=^|\s):d\b

编辑:正如Bob Vale指出的那样,如果您匹配像:/这样的笑脸,这也适用,/不会触发单词边界。你必须做同样的事情,但有一个前瞻:

(?<=^|\s):d(?=$|\s)

答案 1 :(得分:1)

你需要使用look back并在字符串和空格的开头/结尾处向前看匹配,因为你想要匹配的字符不一定会触发通常的字边界规则。

使用(?<=^|\s):d(?=$|\s)此模式适用于所有匹配项,例如(?<=^|\s):\)(?=$|\s)