我正在嘗試創建一個匹配多個組的正則運算式,以便可以提取組之間的值。每組看起來都一樣。
讓我們考慮以下示例,請注意換行符是有意的:
dog 1
wuff
wuff
cat
123
XYZ
dog 1
wuff
wuff
cat
456
ABC
dog 1
wuff
wuff
cat
789
因此,使用正確的正則運算式,我想獲得輸出:
123
XYZ
456
ABC
789
在 regex101.com 我試過:
(?s)(?:dog.*cat)
它匹配第一次出現狗和最后一次出現貓之間的所有值。
另外我試過:
(?s)(?:dog.*(cat){1})
以我有限的知識,它應該匹配 cat 的第一次出現,然后結束該組,但事實并非如此。
我很感激任何幫助。
uj5u.com熱心網友回復:
您可以在 MULTILINE 模式下使用此正則運算式在匹配后捕獲值dog.*cat:
^dog\b(?:.*\n) ?cat\n(.*(?:\n.*)*?)(?=\ndog|\Z)
您的值出現在捕獲組 #1 中
正則運算式演示
正則運算式詳情:
^: 匹配起始行dog\b: 匹配單詞dog與單詞邊界(?:.*\n) ?: 匹配任何后跟換行符的內容。重復 1 次(懶惰)cat\n: 匹配cat后跟換行符(.*(?:\n.*)*?):這些是您對第一個捕獲組感興趣的多行值。(?=\ndog|\Z): Lookahead 斷言我們dog在當前位置之前有一個換行符或輸入結束符
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/334544.html
