我想匹配一个必须存在两个单词的模式,但我无法使我的正则表达式工作。
结果为null。为什么呢?
select 'only test bla dido simple' REGEXP '^(\\?=.*\\?(simple))(\\?=.*\\?(only))*$';
答案 0 :(得分:0)
您的结果实际上为零,而不是NULL
。 MySQL REGEXP
运算符为非匹配返回0,为匹配返回1。 (如您所知,NULL
在RDBMS领域具有特定含义。)
所以问题是,你的特定正则表达式匹配什么?让我们解构它。
'^(\\?=.*\\?(simple))(\\?=.*\\?(only))*$'
它以^
开头,以$
结尾,因此它必须匹配整个字符串,而不是子字符串。
它由两个连接的表达式组成,两者都是
形式(\\?=.*\\?(word))
据我所知,你想要匹配:
我无法弄清楚你希望用这个复杂的匹配序列完成什么。输入文本中没有任何等号。
您可以使用此声明。当然它返回零,因为单词simple只出现在输入文本中。
SELECT 'only test bla dido simple' REGEXP '^.*(simple).*(only).*$'
MySQL不处理(?=pattern)
超前表达式,如果这是你要做的事情。
答案 1 :(得分:-1)
对于单词简单和仅,常规正则表达式将为^(?=.*\bsimple\b)(?=.*\bonly\b).*$
。
要通过 mysql 接受此正则表达式,您必须根据需要添加转义\
个字符 - 现在这对您来说就是一个任务。