2011-04-21 109 views
0

我想創造出替代文本類似下面的(類似於MediaWiki的語法)語法分析器:模板解析器

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

正則表達式應該匹配拆分爲模板名稱的花括號之間的文本(到組和參數)。這是我已經得到的。

如果我不得到進一步的無限嵌套的模板:

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

文本應該從最裏面的被替換到最外面的模板。我不確定如何編寫一個不會在上面的示例中的第一個大括號處出現的正則表達式。如果正則表達式只匹配最裏面的模板(裏面沒有{{}}),那麼最好。從哪兒開始?

+1

你想找什麼樣的正則表達式? – 2011-04-21 14:46:11

+0

PCRE是我正在使用的,但是如果它在任何其他正則表達式中都容易得多,我也會很感激你的答案。 – wiki138 2011-04-21 14:54:40

+0

許多語言都支持某種形式的PCRE,但實現之間仍然存在(很小的)差異:最好只說出您正在使用(或將要使用)的語言。 – 2011-04-21 17:39:19

回答

0

你想只匹配最裏面的事情,這意味着該文本可能不包含括號(但大括號括起來):

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

你的結果將是匹配組1

+0

該文本可能包含大括號,但不包含任何有效的其他模板(例如'{{template | aa {{| bb}}',所以'{{template | aa {{}} | bb}}'但不包含'{{模板| aa {{子模板}} | bb}}'應該被允許),但是開局良好,謝謝。 – wiki138 2011-04-21 14:53:38

+0

是什麼讓東西成爲有效的模板? – 2011-04-21 14:59:24

2

它看起來你正在跑the limitations of regular languages。如果您正在進行全嵌套遞歸嵌入等操作,並且沒有任何簡單的技巧來告訴您最深層嵌套的位置(如Ingo的無括號提示),則您希望使用上下文無關語法。