-4

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

结果为空。为什么?

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

2 回答 2

0

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

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

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

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

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

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

据我所知,你想匹配:

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

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

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

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

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

于 2012-06-26T13:31:13.857 回答
-1

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

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

于 2012-06-26T13:19:01.403 回答