簡體   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