标签: php regex
我有以下正则表达式来检测提及并将它们提取到字符串中:
preg_match_all('/(?<=^|\s)@([^@\s]+)/'
这适用于检测这样的字符串:
@ajksdh @kajshd123 @12398asdd
但是我想做一个例外,以便它不会检测以&rb&#39;结尾的提及字符串,所以以下内容不应该匹配
@72rb @80rb
所以格式是一些数字,然后是&#39; rb&#39;。这甚至可能吗?
答案 0 :(得分:3)
第1步
要排除以rb结尾的字符串,只需添加结束边界和负向外观:
rb
(?<=^|\s)@([^@\s]+)(?<!rb)\b
请参阅demo
第2步
缺少的是[^@\s]并没有真正定义你想要的东西(我猜)。目前,它匹配换行符,例如日语字符。这可能更接近你想要的东西:
[^@\s]
(?<=^|\s)@((?:(?!@)\w)+)(?<!rb)\b
微调
如果您想要允许更多字符而不只是\w,请告诉我哪些字符,我们可以对此进行调整。例如,要允许除空格之外的所有ASCII字符,我们可以使用:
\w
(?<=^|\s)@((?:(?!@)[!-~])+)(?<!rb)\b