我找不到使用regexp查找包含第一个单词和第二个单词的所有匹配项的方法,但这两个单词之间不应该是特定的单词。 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
select '<p>66-155</p><p>en application</p>' regexp '66-155.*[<,p,>]en application'
select '<p>66-155 en application</p>' regexp '66-155.*[<,p,>]en application'
d8tt03nd1#
在8.0之前的mysql版本中,不能使用单个正则表达式,因为它是基于posix的正则表达式,不支持lookarounds。对于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 regex引擎,可以使用基于lookaround的regex:
REGEXP '66-155(?:(?!<p>).)*?en application'
这个 (?:(?!<p>).)*? 是一个匹配任何字符(除了换行符字符,要匹配包括换行符在内的任何字符,请添加 (?s) 在模式开始)与 . ,尽可能少的重复(由于 *? 量词),它不会启动 <p> 字符序列。
(?:(?!<p>).)*?
(?s)
.
*?
<p>
1条答案
按热度按时间d8tt03nd1#
在8.0之前的mysql版本中,不能使用单个正则表达式,因为它是基于posix的正则表达式,不支持lookarounds。
对于mysql的早期版本,您可以使用
如果您有正则表达式模式,而不是文字子字符串,那么
在mysql 8.x中,使用icu regex引擎,可以使用基于lookaround的regex:
这个
(?:(?!<p>).)*?
是一个匹配任何字符(除了换行符字符,要匹配包括换行符在内的任何字符,请添加(?s)
在模式开始)与.
,尽可能少的重复(由于*?
量词),它不会启动<p>
字符序列。