如何在提及中检测某些结束词

时间:2014-06-15 23:57:35

标签: php regex

我有以下正则表达式来检测提及并将它们提取到字符串中:

preg_match_all('/(?<=^|\s)@([^@\s]+)/'

这适用于检测这样的字符串:

@ajksdh
@kajshd123
@12398asdd

但是我想做一个例外,以便它不会检测以&rb&#39;结尾的提及字符串,所以以下内容不应该匹配

@72rb
@80rb

所以格式是一些数字,然后是&#39; rb&#39;。这甚至可能吗?

1 个答案:

答案 0 :(得分:3)

第1步

要排除以rb结尾的字符串,只需添加结束边界和负向外观:

(?<=^|\s)@([^@\s]+)(?<!rb)\b

请参阅demo

第2步

缺少的是[^@\s]并没有真正定义你想要的东西(我猜)。目前,它匹配换行符,例如日语字符。这可能更接近你想要的东西:

(?<=^|\s)@((?:(?!@)\w)+)(?<!rb)\b

请参阅demo

微调

如果您想要允许更多字符而不只是\w,请告诉我哪些字符,我们可以对此进行调整。例如,要允许除空格之外的所有ASCII字符,我们可以使用:

(?<=^|\s)@((?:(?!@)[!-~])+)(?<!rb)\b