如何编写MySQL REGEXP?

如何编写MySQL REGEXP?,sql,mysql,database,regex,Sql,Mysql,Database,Regex,一个表包含字符串Hello world 考虑到*是普通的通配符,我如何编写一个REGEXP,它将为'W*rld'求值为true但“H*rld”为假因为H是另一个词的一部分。”W*rld'也应计算为false,因为后面有'!' 如果您只是想匹配单词world,请执行以下操作: SELECT * FROM `table` WHERE `field_name` LIKE "w_rld!"; _u允许使用单个通配符 编辑:我意识到OP使用REGEXP请求此解决方案,但由于不使用正则表达式也可以获得相同

一个表包含字符串Hello world


考虑到*是普通的通配符,我如何编写一个REGEXP,它将为'W*rld'求值为true但“H*rld”为假因为H是另一个词的一部分。”W*rld'也应计算为false,因为后面有'!'

如果您只是想匹配单词world,请执行以下操作:

SELECT * FROM `table` WHERE `field_name` LIKE "w_rld!";
_u允许使用单个通配符

编辑:我意识到OP使用REGEXP请求此解决方案,但由于不使用正则表达式也可以获得相同的结果,因此我提供了一个可行的解决方案,它的执行速度应该比REGEXP快。

使用:

WHERE column REGEXP 'W[[:alnum:]]+rld!'
或者,您可以使用:

WHERE column RLIKE 'W[[:alnum:]]+rld!'
RLIKE是REGEXP的同义词 [[:alnum:][]将允许任何字母数字字符,[[:alnum:][]将允许倍数 REGEXP\RLIKE不区分大小写,除非与二进制字符串一起使用。
参考:

您可以在MySQL中使用正则表达式:

SELECT 'Hello world!' REGEXP 'H[[:alnum:]]+rld!'
0
SELECT 'Hello world!' REGEXP 'w[[:alnum:]]+rld!'
1

可以找到有关语法的更多信息。

同意,但由于不使用REGEXP就可以实现结果,在生产环境中,正确的方法不是使用不使用REGEXP的解决方案吗?那么哪一种更快呢?REGEXP还是LIKE?@dougneiner:如果LIKE和REGEXP都能用的话,你当然应该更喜欢LIKE而不是REGEXP。但是,如果他给出的例子只是简单的例子,而实际上他必须匹配更复杂的事情,而这些事情是用类似的工具无法完成的呢?如果LIKE给出了错误的结果,那么它的性能是无关紧要的。@Nirmal LIKE在我的本地快速小测试中要快得多。@Mark,你当然是对的。然而,如果更快的解决方案确实帮助OP或其他搜索者加快他们的查询速度,那么我认为它仍然有价值。特别是@OMG小马,你的答案很清楚,你的答案被接受了。