首页 > 解决方案 > 如何匹配 Lark 中的开始和结束标签?

问题描述

我正在尝试使用LarkWordPress 短代码创建一个解析器。该语言中的自闭合标签与标准的开始标签没有区别,即使在完全有效的语法中也会造成相当多的歧义。我已经让它大部分工作了,但正在努力匹配开始和结束标签。

以下示例包含一个自闭合标签 [a] 和一个带有纯文本内容的标签 [b][/b]:

[a][b] content [/b]

我的语言定义的相关部分如下所示:

shortcode: shortcode_template{shortcode_name, attribute_list} | "[" shortcode_name attribute_list "]"
shortcode_template{name, attrs}: "[" name attrs "]" value "[/" name "]"
shortcode_name: /[^\[\]\<\>\&\/\s]+/

我希望为开始/结束标记变体使用模板会做类似于正则表达式组逻辑的事情,例如"[" (name) attrs "]" value "[/" $1 "]",但这似乎只是被解压缩到"[" shortcode_name attribute_list "]" value "[/" shortcode_name "]"中,导致上述文本被解析为:

value
  shortcode
    shortcode_template
      shortcode_name    a
      attribute_list
      value
        shortcode
          shortcode_name    b
          attribute_list
      shortcode_name    b

是否有一个选项告诉 Lark 开始标签中的名称值应该与结束标签中的名称值相同?

标签: pythonparsingebnflark-parser

解决方案


推荐阅读