模式所有单词必须存在于正则表达式中

时间:2012-06-26 12:17:18

标签: mysql regex

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

结果为null。为什么呢?

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

据我所知,你想要匹配:

  1. 可选的反斜杠
  2. 等号
  3. 任何字符串长度为零或更长,吞噬输入
  4. 另一个可选的反斜杠
  5. 单词
  6. 我无法弄清楚你希望用这个复杂的匹配序列完成什么。输入文本中没有任何等号。

    您可以使用此声明。当然它返回零,因为单词simple只出现在输入文本中。

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

    MySQL不处理(?=pattern)超前表达式,如果这是你要做的事情。

答案 1 :(得分:-1)

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

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