匹配包含多个单词的正则表达式

时间:2019-01-27 03:31:09

标签: mysql regex

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

我有一个列someProps,其中包含诸如stringappleorange之类的关键字。我需要使用正则表达式搜索包含lemonapple的行,该命令具有以下内容:

orange

上面的命令将违反规则,如果带有水果where string regexp '(apple|orange)' and fruit = 1 的行只有1,则不应将其包括在结果中,因为水果apple没有另一行包含1

1 个答案:

答案 0 :(得分:0)

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

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

这也将匹配“ ORANGE彩色苹果”和其他一些变体。全文有一些警告,例如仅处理“单词”而不处理简短的单词。但是,如果这些限制都可以,那么它将比LIKEREGEXP快得多。

如果无法使用Fulltext,则最好使用以下方法:

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

或者可以通过REGEXP来完成:

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

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

相关问题