正则表达式用于MySQL列中的多行数据

时间:2019-05-31 10:56:48

标签: mysql regex

我有一列包含XML的列,我想使用正则表达式根据条件列出ID。

我的XML数据的一部分已复制到outfile:

  <definitions>^M\
    <definition id=

我想列出一个基于xmldata的列,该列中有<definitions>后跟<definition id="1"

到目前为止,我已经尝试了正则表达式的不同组合,但没有成功

where <col> REGEXP '.*<definitions>\r.\s+<definition id="1"'

1 个答案:

答案 0 :(得分:2)

请注意,REGEXP可以在字符串中的任何位置进行匹配,而不必在开头(与LIKE不同)进行匹配,因此您不需要在开头.*

8.x之前的MySQL版本不支持类似Perl的速记类,并且\s在此处无效。在MySQL 8.x中,ICU regex库支持\s

您可以在任何MySQL中使用:

where col REGEXP '<definitions>[[:space:]]+<definition id="1"'

或者,如果元素之间可能缺少空格:

where col REGEXP '<definitions>[[:space:]]*<definition id="1"'

包含[[:space:]]个POSIX字符类的[:space:]括号表达式与任何空白字符匹配,并且+对字符的1个或多个重复进行计算,而*匹配0个或多个他们。