[英]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.