gpt4 book ai didi

php - 获取所有嵌套的花括号

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

可以从字符串中获取嵌套花括号中的所有内容吗?例如:

The {quick} brown fox {jumps {over the} lazy} dog



所以我需要:
  • 跳过{越过}懒惰

  • 在这个序列中更好,从大多数嵌套。

    最佳答案

    解决方案

    下面的正则表达式将允许您获取所有嵌套花括号的内容。请注意,这假设嵌套的花括号是平衡的;否则,很难定义答案应该是什么。

    (?=\{((?:[^{}]++|\{(?1)\})++)\})

    结果将是捕获组 1。

    DEMO

    但是请注意,顺序与问题中指定的不一样。打印出的顺序由大括号 {的出现顺序定义。 ,这意味着最外面对的内容将首先打印出来。

    解释

    忽略零宽度正向预测 (?=pattern)现在,让我们关注内部的模式,即:
    \{((?:[^{}]++|\{(?1)\})++)\}

    两个文字花括号之间的部分 - ((?:[^{}]++|\{(?1)\})++)将匹配 1 个或多个 以下任一情况:
  • 非空非大括号字符序列 [^{}]++ , 或
  • 递归匹配由 {} 包围的块,其中可能包含许多其他非花括号序列或其他块。

  • 仅上述模式就可以匹配不包含 {} 的文本,我们不需要。因此,我们确保匹配是由 {} 包围的块。由一对花括号 {}两端: \{((?:[^{}]++|\{(?1)\})++)\} .

    由于我们希望所有嵌套花括号内的内容,我们需要防止引擎消耗文本。这就是使用零宽度正前瞻的地方。

    它不是很有效,因为您将重做嵌套大括号的匹配,但我怀疑是否有任何其他通用的正则表达式解决方案可以有效地处理它。

    普通代码可以一次有效地处理所有事情,如果您将来要扩展您的需求,建议您使用。

    关于php - 获取所有嵌套的花括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16258143/

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