繁体   English   中英

捕获重复模式的正则表达式问题

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

从这个字符串中,我需要提取以下数据:

  1. 标题1
  2. F
  3. (S #h88 (P #m6) (P #m31)) 和 (S #k3 (P #m58) (P #m58))

  1. 标题2
  2. (S #a54 (P #r8)) 和 (S #v59 (P #a25) (P #y82))

在哪里

  1. 是某种标题。
  2. 是某种状态。
  3. 是某种列表列表,例如(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 组: PF
  • ((?:\s+(\([SP](?:[^()]*+|(?-1))*\)))*\)) - 第3组:
    • (?:\s+(\([SP](?:[^()]*+|(?-1))*\)))* - 零次或多次重复
      • \s+ - 一个或多个空格
      • (\([SP](?:[^()]*+|(?-1))*\)) - 第 4 组(技术,递归所必需):
        • \( - 一个(字符
        • [SP] - SP
        • (?:[^()]*+|(?-1))* - 除()或整个最近捕获的模式之外的零个或多个字符
        • \) - a )字符
    • \) - a )字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM