找不到在模式内取反正则表达式的方法

塞迪克

我找不到一种使用正则表达式的方法来查找包含第一个单词第二个单词的所有匹配项,但两者之间不应该是一个特定的单词。

select '<p>66-155</p><p>en application</p>' regexp '66-155.*[<,p,>]en application'

应该返回0

select '<p>66-155 en application</p>' regexp '66-155.*[<,p,>]en application'

应该返回1

维克多·史翠比维

在8.0之前的MySQL版本中,您不能为此使用单个正则表达式,因为它是不支持环视的基于POSIX的正则表达式。

在早期版本的MySQL中,您可以使用类似

LIKE '%66-155%en application%' AND NOT LIKE '%66-155%<p>%en application%'

如果您使用的是正则表达式模式,而不是文字上的子字符串,那么它将看起来像

REGEXP '66-155.*en application' AND NOT REGEXP '66-155.*<p>.*en application'

在MySQL 8.x中,通过ICU正则表达式引擎,您可以使用基于环视的正则表达式:

REGEXP '66-155(?:(?!<p>).)*?en application'

(?:(?!<p>).)*?锻炼贪婪令牌匹配任何字符(除换行符字符,匹配包括换行符的任何字符,添加(?s)在模式开始)与.,少重复地(由于*?量词),即不启动<p>字符序列。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章