【问题标题】:Pattern all words must be present in regex [closed]模式所有单词都必须出现在正则表达式中[关闭]
【发布时间】:2012-06-26 12:17:17
【问题描述】:

我想匹配一个必须存在两个单词的模式,但我无法让我的正则表达式工作。

结果为空。为什么?

select 'only test bla dido simple' REGEXP '^(\\?=.*\\?(simple))(\\?=.*\\?(only))*$';

【问题讨论】:

  • 我想要字符串“onty test dido simple”中的 mutch 2 个单词(简单且唯一),但我认为没有这样的结果:
    +---------- ------------------------------------------------+
    | '只测试简单' REGEXP '^(\\?=.*\\?(simple))(\\?=.*\\?only))*$'
    | +----------------------------------------------+
    | 0 |
    +-------------------------------------------- ---+
  • @AbdelillahFarka,看看here
  • 欢迎来到 Stackoverflow。在你的问题中使用一些形式会很有帮助:这个系统作为一个档案来帮助其他人解决类似的问题。我已经编辑了你的问题以帮助做到这一点。此外,您应该接受对您有帮助的答案,方法是重新访问该问题并单击该答案旁边的绿色复选框。
  • Abdelillah Farka - 以下内容适用于您的问题的每个答案:答案左侧是一个带有向上/向下箭头的大数字(代表向上/向下投票)(供合格用户投票)。当您将鼠标指针悬停在向下箭头下方时,将出现复选标记。如果您检查它,颜色将变为绿色,这样您就接受了这样的答案。那是你应该做的。没有免费的赌注。 SO用户值得被接受寻求帮助。回到你以前的问题,现在就做!

标签: mysql regex


【解决方案1】:

您的结果实际上为零,而不是NULL。 MySQL REGEXP 运算符返回 0 表示不匹配,1 表示匹配。 (如您所知,NULL 在 RDBMS 世界中具有特定含义。)

所以问题是,您的特定正则表达式匹配什么?让我们解构它。

 '^(\\?=.*\\?(simple))(\\?=.*\\?(only))*$'

它以^ 开头并以$ 结尾,因此它必须匹配整个字符串,而不是子字符串。

它由两个连接的表达式组成,两者的形式都是

(\\?=.*\\?(word))

据我所知,你想匹配:

  1. 可选的反斜杠
  2. 等号
  3. 任何长度为零或更长的字符串,吞噬输入
  4. 另一个可选的反斜杠
  5. 这个词

我无法弄清楚您希望通过这种复杂的匹配序列来完成什么。您的输入文本中没有任何等号。

您可以使用此语句。当然它会返回零,因为 simple 一词仅在您的输入文本中出现在该词之后。

 SELECT 'only test bla dido simple' REGEXP '^.*(simple).*(only).*$'

MySQL 不处理 (?=pattern) 前瞻表达式,如果这是您想要做的。

【讨论】:

  • 但是我的结果是零:-(
  • @ollie jones mysql 中 (?=pattern) 前瞻的解决方法是什么?
【解决方案2】:

对于 simpleonly 字词,常规正则表达式为 ^(?=.*\bsimple\b)(?=.*\bonly\b).*$

要通过 mysql 接受这个正则表达式,您必须根据需要添加转义 \ 字符 - 现在是您的任务。

【讨论】:

    猜你喜欢
    • 2022-07-29
    • 2014-12-13
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多