簡體   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