【问题标题】:MySQL REGEXP and repeated wordsMySQL REGEXP 和重复的单词
【发布时间】:2014-06-21 08:39:43
【问题描述】:

我有一个特定的问题。

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

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

我已经完成了一个正则表达式((hello|red).*){2}()*,只有在子句中一个词hello和一个词red时才有效,但在我的子句中,两个词helloregexp将在没有词red的情况下工作,怎么了:(

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

请帮忙。

谢谢。

【问题讨论】:

  • 您的正则表达式有效,因为hello 确实被找到了两次,您不需要red 专门在那里,而是hellored

标签: mysql regex


【解决方案1】:

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

因此,您唯一的选择(如果您想在单个正则表达式中执行此操作)是“手动”处理两种变体(red 之后的hellohello 之前的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

【讨论】:

  • 我想用什么:)) 显然没有办法。非常感谢。
【解决方案2】:

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

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

这里是它的在线演示,其中复杂地解释了它是如何工作的: http://regex101.com/r/eL3wA0

【讨论】:

    【解决方案3】:

    这可能取决于你想做什么,但我相信正则表达式对于这项任务来说是一种过度杀伤力。

    简单的怎么样:

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

    【讨论】:

    • 不幸的是,我的任务不适用。但是无论如何。
    猜你喜欢
    • 2011-12-21
    • 2012-06-22
    • 2011-11-25
    • 1970-01-01
    • 2019-07-25
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多