首页 > 解决方案 > 匹配包含多个单词的正则表达式

问题描述

我应该在 MySQL 中使用什么方法将两个或多个字符串与一列匹配?

我有一列string包含关键字,例如apple,orangelemon。我需要的是搜索包含appleorange使用正则表达式的行,该命令具有以下内容:

where string regexp '(apple|orange)' and fruit = 1

上面的命令将打破规则,如果有fruit的行1只有apple它不应该包含在结果中,因为fruit1没有另一行包含orange

标签: mysqlregex

解决方案


如果您想在(且仅当)string同时包含“apple”和“orange”时成功,那么最好的方法是FULLTEXT(string)

WHERE MATCH(string) AGAINST("+apple +orange" IN BOOLEAN MODE)

这也将匹配“橙色苹果”和其他一些变体。Fulltext 有一些注意事项,例如只处理“单词”而不处理短单词。但是如果限制没问题,这将比LIKEor快得多REGEXP

如果全文不起作用,那么最好是这样的:

WHERE string LIKE '%apple%'
  AND string LIKE '%orange%'

或者可以通过以下方式完成REGEXP

WHERE string REGEXP '(apple.*orange)|(orange.*apple)'

如果您需要遵守单词边界和/或允许复数,请将其添加到您的规范中;这些建议的解决方案可能需要改变。例如,更改.*.+将拒绝“appleorange”,同时仍允许“apple/orange”。


推荐阅读