繁体   English   中英

REGEXP MySQL - 无论哪个顺序都有几个组

[英]REGEXP MySQL - several Groups no matter which order

我尝试在 MySQL 中创建一个 REGEX,但在阅读其他示例 4 小时并尝试错误后,我希望有人可以帮助我修复我的正则表达式并使其正常工作。

我需要的是:匹配一个单独的(“###”)文本中的几个字符串,无论它们在“### TEXT ### TEXT ###”中的位置/顺序

到目前为止,我的正则表达式有效,但前提是字符串的顺序与正则表达式中的完全一致。 所以我不得不说我的正则表达式搜索 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###

当我将文本修改为类似(“9037==DIN C4”之前“9034==1-wellig”)时,它不起作用:

###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###

示例: https : //regex101.com/r/amal7c/1

我希望我清楚地解释了我的问题,我确定这只是 1 个小改动,但我没有让它起作用......

最好的问候汤姆

你不能在 MySQL 正则表达式中使用环视,你需要使用交替:

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以外的字符
  • [^#]*### - 除#零个或多个字符,后跟###

OMG 好的,我想我只是自己找到了解决方案,它适用于 regex101 但不适用于 MySQL:/

###(?=[^#]*(9034==1-wellig))(?=[^#]*(9037==DIN C4))[^#]*###

但是,如果你们中的一些专家可以增强我的正则表达式,我也非常感谢:)

https://regex101.com/r/amal7c/2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM