gpt4 book ai didi

regex - 用于匹配括号中所有内容的递归正则表达式 (PCRE)

转载 作者:行者123 更新时间:2023-12-01 13:16:43 25 4
gpt4 key购买 nike

我很惊讶不容易找到类似问题的答案。我想匹配某些功能中的所有内容。这个想法是删除无用的功能。

foo(some (content)) --> some (content)

所以我试图匹配函数调用中可以包含括号的所有内容。这是我的 PCRE 正则表达式:

(?<name>\w+)\s*\(\K
(?<e>
[^()]+
|
[^()]*
\((?&e)\)
[^()]*
)*
(?=\))

https://regex101.com/r/gfMAIM/1

不幸的是它不起作用,我真的不明白为什么。

最佳答案

您的组 e pattern 没有做正确的工作,目前,它匹配具有 1 个深度级别的括号,因为您只递归了 e模式一次。它需要匹配尽可能多的 (...)存在的子字符串,因此,子例程模式需要在 * 内或 +量化组,甚至可以“简化”为(?<e>[^()]*(?:\((?&e)\)[^()]*)*) .

请注意,您的群组 e模式等于 (?<e>[^()]+|\((?&e)\))* . [^()]*周围\((?&e)\)[^()]+ 以来是多余的alternative 将消耗 ( 以外的字符和 )在当前的深度级别。

此外,您还对集团 e 进行了量化图案使其成为 repeated capturing group仅在上一次迭代期间保持文本匹配。

你可以使用

(?<name>\w+)\s*\(\K(?<e>[^()]*(?:\((?&e)\)[^()]*)*)(?=\))

参见 regex demo

详情

  • (?<name>\w+)\s*\(\K - 1+ 个单词字符,0+ 个空格和 (匹配中省略的内容
  • (?<e> - 组开始e
    • [^()]* - 除 ( 以外的 0+ 个字符和 )
    • (?: - 非捕获组的开始:
      • \( - 一个 (字符
      • (?&e) - 集团e模式递归
      • \) - 一个 )
      • [^()]* - 除 ( 以外的 0+ 个字符和 )
    • )* - 0 次或多次重复
  • ) - e 结束小组
  • (?=\)) - 一个 )必须紧靠当前位置的右侧。

关于regex - 用于匹配括号中所有内容的递归正则表达式 (PCRE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54143257/

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