我尝试在MySQL中创建一个REGEX但在阅读其他示例4小时后尝试&错误我希望有人可以帮助我修复我的正则表达并让它工作。
我需要的是: 在seperatet(“###”)文本中匹配多个字符串,无论它们位于哪个位置/顺序“### 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###
当我将我的文本修改为类似的内容(“9034 == 1-wellig”之前的“9037 == DIN C4”)时,它不起作用:
###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
我希望我清楚地解释了我的问题,我确定这只是一个很小的改变,但我没有让它工作......
最诚挚的问候 汤姆
答案 0 :(得分:1)
你不能在MySQL正则表达式中使用lookarounds,你需要使用替换:
WHERE col REGEXP '###[^#]*(9034==1-wellig[^#]*9037==DIN C4|9037==DIN C4[^#]*9034==1-wellig)[^#]*###'
请参阅this regex demo。
<强>详情
###
- 文字###
[^#]*
- 除#
(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
以外的零个或多个字符[^#]*###
- 除了#
之外的零个或多个字符,后跟###
。答案 1 :(得分:0)
OMG好吧我想我自己找到了解决方案,它在regex101上运行但在MySQL中没有:/
###(?=[^#]*(9034==1-wellig))(?=[^#]*(9037==DIN C4))[^#]*###
但如果你们中的一些专家可以提高我的正则表达式,我也非常感谢:)