模板解析器

时间:2011-04-21 14:43:24

标签: regex parsing

我想创建一个解析器来替换下面的文本(类似于MediaWiki的语法):

some text {{template|parameter1|parameter2}} some text

正则表达式应匹配花括号之间的文本(拆分为模板名称和参数的组)。这就是我已经拥有的。

我无法进一步获得无限嵌套模板:

some text {{template|{{subtemplate|st-parameter}}|parameter2}} some text

应该从最里面的模板到最外面的模板替换文本。我不确定如何编写一个正如在上面的例子中的第一个结束括号中断的正则表达式。如果正则表达式仅匹配最里面的模板(内部没有{{}}),则最好。从哪里开始?

2 个答案:

答案 0 :(得分:2)

看起来你正在对抗the limitations of regular languages。如果你正在进行全面的递归嵌入,没有任何简单的技巧来告诉你最深层次的嵌套(比如Ingo建议没有大括号),你想要使用无上下文语法。

答案 1 :(得分:0)

你想只匹配最里面的东西,这意味着文本可能不包含大括号(但用大括号括起来):

\{([^{}]*)\}

您的结果将在匹配组1中。