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