我有以下正则表达式来检测提及并将其提取到字符串中:
preg_match_all('/(?<=^|\s)@([^@\s]+)/'
这对于检测如下字符串非常有效:
@ajksdh
@kajshd123
@12398asdd
但是我想破例,以便它不会检测以“rb”结尾的提及字符串,因此不应匹配以下内容
@72rb
@80rb
所以格式是一些数字后跟“rb”。这可能吗?
最佳答案
第 1 步
要排除以 rb
结尾的字符串,只需添加结束边界和负向后查找:
(?<=^|\s)@([^@\s]+)(?<!rb)\b
参见demo
第 2 步
缺少的是 [^@\s]
并没有真正定义你想要的(我猜)。目前,它正在匹配换行符和日语字符。这可能更接近您想要的:
(?<=^|\s)@((?:(?!@)\w)+)(?<!rb)\b
参见demo
微调
如果您想要允许更多字符而不只是 \w
,请告诉我哪些字符,我们可以对此进行调整。例如,要允许除空格之外的所有 ASCII 字符,我们可以使用:
(?<=^|\s)@((?:(?!@)[!-~])+)(?<!rb)\b
关于php - 如何检测提及中的某些结尾词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24235155/