【发布时间】:2011-04-17 01:16:10
【问题描述】:
我想用 MySQL 对一个变量进行 REGEXP 匹配,如下所示:
SELECT *
FROM table
WHERE table.CONTENT
REGEXP CONCAT('([[:space:]]|[[:punct:]])', table.NAME, '([[:space:]]|[[:punct:]])')
这可以正常工作,但 table.NAME 中可能包含正则表达式特殊字符(例如“|”),在这种情况下它会搞砸。是否有一个正则表达式操作符可以按字面意思处理整个字符序列并忽略其中的操作符?
例如,如果 table.NAME 是 'left|right' 的一行,我希望它仅在 table.CONTENT 字面上包含字符串 'left|right' 时才匹配。但除非我能以某种方式强制执行,否则 MySQL 会将其视为运算符并查找“左”或“右”。
【问题讨论】:
-
您知道 REGEXP 比
LIKE慢吗?如果您想要更好的性能,我建议使用不涉及特殊字符的命名方案。