[英]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))[^#]*###
但是,如果你们中的一些专家可以增强我的正则表达式,我也非常感谢:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.