代码之家  ›  专栏  ›  技术社区  ›  Christian Beikov

用preg\u match解析PHP中的嵌套结构

  •  0
  • Christian Beikov  · 技术社区  · 14 年前

    起始标识符:{

    结束标识符:}

    您可以使用点(.)在对象中导航,但也可以执行算术/逻辑/关系操作。

    下面是元语言的示例:

    • {我自己。妈妈。工作。工作名}

    • {我自己{myObj.{keys[“ObjProps”][0]}.personAttribute.first}.size}

    或与操作

    • {obj.val*(otherObj.intVal+myObj.longVal)==1200}

    或更符合逻辑

    • {obj.condition==!myObj.otherCondition}

    e、 g.“你好{myObj.name}!你{myObj.type}怎么样。

    http://sourceforge.net/projects/blazeframework/

    提前谢谢!

    2 回复  |  直到 14 年前
        1
  •  1
  •   Daniel Vandersluis    14 年前

    使用正则表达式解析不确定数量的匹配大括号并非易事,因为通常情况下,要么匹配太多,要么匹配太少。

    例如,考虑 Hello {myObj.name}! {mySelf.{myObj.{keys["ObjProps"][0]}.personAttribute.first}.size}?

    如果您使用第一个可能想到的正则表达式 \{.*\} 要匹配大括号,您将获得一个匹配项: {myObj.name}! {mySelf.{myObj.{keys["ObjProps"][0]}.personAttribute.first}.size} 这是因为在默认情况下,正则表达式是 尽可能匹配。

    \{.*?\} ,这将使开括号和闭括号之间尽可能少地匹配。使用相同的字符串,此模式将导致两个匹配: {myObj.name} {mySelf.{myObj.{keys["ObjProps"][0]} . 显然,第二个不是完全表达式,但非贪婪模式将尽可能少地匹配,这是满足该模式的最小匹配。

    recursive regular expressions

        2
  •  0
  •   Andreas Linden    14 年前

    也许看看PREG\u OFFSET\u CAPTURE标志!?