[英]Return substring of all lines that start with [+] between two specific lines
我有一個示例多行字符串,如下所示:
[+] x: somerandomstuff
[!] blah
[+] x: somemorerandomstuff
[-] blah
[+] START
[+] x: 1st group to match
[!] blah
[-] blah
[+] x: 2nd group to match
[+] END
我想在看起來像[+] x: (...)
行中匹配x:
之后的字符串,但只匹配[+] START
和[+] END
之間的那些字符串。 預期結果將是兩個組(可能會更多):
1st group to match
2nd group to match
請注意,只有一個START / END實例。
我只設法提出了與第一組相匹配的東西:
\[\+\] START.*?\[\+\] x: (.*?)\n.*\[\+\] END
我目前缺乏擴展此正則表達式以匹配其他行的知識。 我不確定如何在另一個模式( [+] START
和[+] END
)之間尋找與某個模式匹配的多行
REGEX101鏈接: https ://regex101.com/r/kCgwhr/2
注意:我知道僅使用正則表達式的解決方案可能不是這里最好的方法,但是我想僅使用正則表達式解決此問題。
我假設您使用的是PCRE兼容的正則表達式,就像您在PCRE模式下使用regex101一樣。
您可以使用\\ G連續匹配(和一些先行的東西)來匹配您想要的內容:
(?:\[\+\] START|\G(?!\A))\R(?:(?!\[\+\] x:)(?!\[\+\] END).*\R)*\[\+\] x:\s*\K.*
這符合:
(?:\\[\\+\\] START|\\G(?!\\A))
-開始順序或在上一場比賽之后。 \\G
在第一次調用正則表達式時在字符串開頭匹配,因此(?!\\A)
確保僅在找到第一個匹配項后才使用\\G
\\R
任何換行序列 (?:(?!\\[\\+\\] x:)(?!\\[\\+\\] END).*\\R)*
-既不以結束序列也不以我們想要的序列開頭的任意數量的行匹配(基本上跳過它們) \\[\\+\\] x:\\s*
-開始我們要匹配的序列 \\K
忽略之前匹配的所有內容(因此,我們僅匹配我們真正想要的內容) .*
我們想要的行的內容 看到它在正則表達式101中工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.