REGEXP MySQL-多个组,无论顺序如何

REGEXP MySQL-多个组,无论顺序如何,mysql,regex,sorting,Mysql,Regex,Sorting,我试图在MySQL中创建一个正则表达式,但在阅读了其他示例和try&error 4个小时后,我希望有人能帮助我修复我的正则表达式,并使其正常工作 我需要的是: 在一个单独的T(“######”)文本中匹配多个字符串,无论它们位于哪个位置/顺序“###文本##文本

我试图在MySQL中创建一个正则表达式,但在阅读了其他示例和try&error 4个小时后,我希望有人能帮助我修复我的正则表达式,并使其正常工作

我需要的是: 在一个单独的T(“######”)文本中匹配多个字符串,无论它们位于哪个位置/顺序“###文本##文本 到目前为止,我的正则表达式是有效的,但前提是字符串的顺序与正则表达式中的顺序相同。所以我必须说我的正则表达式搜索STRING1和STRING2在###########内,无论在哪个位置

###([^#]*)(9034==1-wellig)([^#]*)(9037==DIN C4)([^#]*)###
我的文本:

###9021==220|9034==1-wellig|9023==356|9024==230|9037==DIN C4###9021==220|9034==2-wellig|9023==356|9037==DIN C4|9024==230###9021==220|9034==1-wellig|9023==356|9037==DIN C4|9024==230###
当我将文本修改为类似的内容(“9034==1-wellig”之前的“9037==dinc4”)时,它不起作用:

###9021==220|9037==DIN C4|9034==1-wellig|9023==356|9024==230###9021==220|9034==2-wellig|9023==356|9037==DIN C4|9024==230###9021==220|9037==DIN C4|9034==1-wellig|9023==356|9024==230###
例如:

我希望我清楚地解释了我的问题,我确信这只是一个小的变化,但我没有让它工作

致意
Tom

天哪,我想我自己刚刚找到了解决方案,它在regex101上工作,但在MySQL上没有:/

###(?=[^#]*(9034==1-wellig))(?=[^#]*(9037==DIN C4))[^#]*###
但如果你们中的一些专家能够增强我的正则表达式,我也非常感谢:)


您不能在MySQL正则表达式中使用lookarounds,您需要使用替代选项:

WHERE col REGEXP '###[^#]*(9034==1-wellig[^#]*9037==DIN C4|9037==DIN C4[^#]*9034==1-wellig)[^#]*###'

详细信息

  • ###
    -文字
    ###
  • [^#]*
    -除
    .
  • (9034==1-wellig[^#]*9037==DIN C4 | 9037==DIN C4[^#]*9034==1-wellig)
    - 一种交替捕获群匹配算法
    • 9034==1-wellig[^#]*9037==DIN C4
      -
      9034==1-wellig
      ,除
      9037==DIN C4
      之外的零个或多个字符
    • |
      -或
    • 9037==DIN C4[^#]*9034==1-wellig
      -
      9037==DIN C4
      ,除
      9034==1-wellig
      之外的零个或多个字符
  • [^#]*.###
    -除
    #
    后接
    ##
    外,零个或多个字符

您的目标环境是什么?如果您为PHP/PCRE编写一个正则表达式,并在MySQL中运行,它可能不起作用。ty@wiktor这将起作用,但im搜索的字符串是动态的,这意味着它也可以是3或最多10。有没有其他方法可以搜索#####STRING1 STRING2 STRING3 STRING4####好的,我想我的正则表达式现在可以了ty@wiktor. 这将是一个大的正则表达式,也许有一个更优雅的方式,但这项工作和性能似乎也没有那么差:)。带3个字符串的示例:很好,我发布了我的答案。