php - 如何检测提及中的某些结尾词

标签 php regex

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

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/

相关文章:

java - 使 .replaceFirst() 在特定字符之后开始

mysql - 从 mysql 列中删除所有数字字符

java - 为什么使用 find() 和 ""作为模式时匹配器会永远循环?

python - 无法在 python 中使用 "regex"和 "re"模块进行大小写转换

php - 无法从 PHP 运行 R 命令。路径问题?

php - Symfony3授权流程

php - 我可以选择表格的行并检索我正在选择的表格的名称吗?

PHP:将 UTF-8 字符串转换为 Ansi?

php - 为什么在响应成功时不通过 Paypal MassApi 转账

python - $如何出现在末尾?