[英]Regex trouble with capturing repeated pattern
假設我有以下字符串:
Some crap string here...(TRACK "title1" F (S #h88 (P #m6) (P #m31)) (S #k3 (P #m58) (P #m58)))(TRACK "title2" P (S #a54 (P #r8)) (S #v59 (P #a25) (P #y82)))...Some other crap string here
從這個字符串中,我需要提取以下數據:
和
在哪里
(S #xx (P #xx))
。 由於正則表達式知識有限,我可以得到 1 和 2,但只能得到 3 的第一部分。
(S #xx (P #xx))
可以存在多次,內部 (P #xx) 也可以存在多次。
我嘗試了許多正則表達式並查閱了很多帖子,但我一直無法按要求獲取數據。
所以現在我回到了\(TRACK "(.*?)" ([P|F]) (\(S.*?\)\))
,它只捕獲了這個示例字符串中兩個列表中的第一個。
見: https://regex101.com/r/FM0ZZR/1
我需要做什么才能獲得所描述的所有列表?
您可以使用
\(TRACK\s+"([^"]*)"\s+([PF])((?:\s+(\([SP](?:[^()]*+|(?-1))*\)))*\))
請參閱正則表達式演示。
細節
\(TRACK
- a (TRACK
substring\s+
- 一個或多個空格"
- 一個"
字符([^"]*)
- 第 1 組:除"
之外的任何零個或多個字符"
- 一個"
字符\s+
- 一個或多個空格([PF])
- 第 2 組: P
或F
((?:\s+(\([SP](?:[^()]*+|(?-1))*\)))*\))
- 第3組:
(?:\s+(\([SP](?:[^()]*+|(?-1))*\)))*
- 零次或多次重復
\s+
- 一個或多個空格(\([SP](?:[^()]*+|(?-1))*\))
- 第 4 組(技術,遞歸所必需):
\(
- 一個(
字符[SP]
- S
或P
(?:[^()]*+|(?-1))*
- 除(
和)
或整個最近捕獲的模式之外的零個或多個字符\)
- a )
字符\)
- a )
字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.