我的任务是为不同字符串中的条目创建黑名单。我正在使用 MySQL
检查数据库中的条目。
您可能知道 MySQL
中的单词边界标记:[[:<:]]
和 [[:>:]]
对应于默认正则表达式中的 \b
。
当字符串中有 regexp special characters
和 word 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/