MySQL REGEXP和重复的单词

时间:2014-05-05 06:02:26

标签: mysql regex

我有一个指定的问题。

我有,例如:Hello little, hello red, sometime and now

我需要正则表达式只有在子句同时包含hellored时才会匹配。

我已经完成了一个正则表达式((hello|red).*){2}()*只有在第一个单词hello和一个单词red中才会起作用,但在我的子句中有两个单词hello和{{ 1}}没有单词regexp就会工作,错了:(

我需要正则表达式,只有当原因包含单词red和单词hello并且不依赖于重复其中一个时才会匹配。

请帮忙。

THX。

3 个答案:

答案 0 :(得分:4)

通常,人们会使用positive lookahead assertions来完成此任务,但MySQL的正则表达式引擎不支持它们。

因此,您唯一的选择(如果您想在单个正则表达式中执行此操作)是处理两种变体(hello之后的redhello之前的red “手动”:

hello.*red|red.*hello

对于两个“搜索词”,这可能是可以接受的 - 但它不能很好地扩展。

你的正则表达式((hello|red).*){2}()*有点奇怪;这意味着

(            # Start of group:
 (hello|red) # Match either hello or red
 .*          # Match any number of characters
){2}         # Match this group twice
()*          # Match the empty string any number of times...

所以这也匹配hello foo hellored bar red

答案 1 :(得分:2)

我不确定它是否能解决您的问题,但这是我的解决方案:

.*(hello.*red|red.*hello).*

以下是它的在线演示,并详细解释了它是如何工作的: http://regex101.com/r/eL3wA0

答案 2 :(得分:0)

这可能取决于你想做什么,但我相信正则表达式对于这项任务来说太过分了。

如何简单:

WHERE col LIKE "%red%"
    AND col LIKE "%hello%"