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