我的任务是为不同字符串中的条目创建黑名单。我正在使用 MySQL 检查数据库中的条目。

您可能知道 MySQL 中的单词边界标记:[[:<:]][[:>:]] 对应于默认正则表达式中的 \b

当字符串中有 regexp special charactersword boundary marks 时会出错。

但是这些字符被双反斜杠转义了!

只需运行此查询

SELECT
"test()" REGEXP "[[:<:]]test\\(\\)[[:>:]]",
"test()" REGEXP "test\\(\\)",
"test"   REGEXP "[[:<:]]test[[:>:]]",
"test"   REGEXP "test" ;

你会得到
0 | 1 | 1 | 1

而不是预期
1 | 1 | 1 | 1

请问有人可以解释如何解决这个问题吗?

最佳答案

不要认为你可以在 MySQL 中很好地做到这一点。因为没有环视(也没有办法否定 [[:<:]][[:>:]] ?)。

根据您定义单词边界的方式(尤其是当涉及非单词字符时,例如 [^A-Za-z0-9_] ),您可以在某些情况下使用如下表达式:

(^|[[:space:]])test\(\)($|[[:space:]])

关于php - 使用单词边界时的奇怪行为 [[ :<:]] and [[:>]],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15868062/

10-11 03:39
查看更多