gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:00:11 24 4
gpt4 key购买 nike

假设我有以下字符串:

这里有些废话字符串...(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)))...这里还有其他废话字符串

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

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

  1. 标题2
  2. P
  3. (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))*\)))*\))

参见 regex demo .

详细信息

  • \(TRACK - 一个 (TRACK子串
  • \s+ - 一个或多个空格
  • " - 一个 "字符
  • ([^"]*) - 第 1 组:" 以外的任何零个或多个字符
  • " - 一个 "字符
  • \s+ - 一个或多个空格
  • ([PF]) - 第 2 组:PF
  • ((?:\s+(\([SP](?:[^()]*+|(?-1))*\)))*\)) - 第 3 组:
    • (?:\s+(\([SP](?:[^()]*+|(?-1))*\)))* - 零次或多次重复
      • \s+ - 一个或多个空格
      • (\([SP](?:[^()]*+|(?-1))*\)) - 第 4 组(技术性的,递归所必需的):
        • \( - 一个 (字符
        • [SP] - SP
        • (?:[^()]*+|(?-1))* - 除 ( 以外的零个或多个字符和 )或整个最近捕获的模式
        • \) - 一个 )字符
    • \) - 一个 )字符。

关于php - 捕获重复模式的正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67093752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com