2011-10-24 30 views
0

我現在正在撰寫一個使用正則表達式來解析模板的小項目,現在最大的問題是我們在這裏也得到了一個「標記」,這使得它很難。如何在標籤內的標籤上使用正則表達式?

Regex reg = new Regex(@"##############TEMPLATEENGINE(^#)##############(.*?)##############TEMPLATEENGINE(\1)##############", RegexOptions.IgnoreCase | RegexOptions.Compiled); 

正常工作的模板一樣

######## TEMPLATEENGINE $$ startswith $$帳戶:名字$$ Firstn ############# #

等等

######## TEMPLATEENGINE $$ startswith $$帳戶:名字$$ Firstn ######## TEMPLATEENGINEaccount:名字######### #####缺少屬性:名字! ############## TEMPLATEENGINEaccount:姓

但只要我有這樣

######## TEMPLATEENGINE $$ startswith $$模板賬號:名字$$ Firstn ##############

等等

######## TEMPLATEENGINEaccount:名字############ ##缺少屬性:名字! ############## TEMPLATEENGINEaccount:firstname ######## TEMPLATEENGINE $$ startswith $$ account:firstname $$ Firstn ########### ###

blahg

它只是發現內模板,雖然覺得\ 1應該確保開始和結束應該是平等的....

+2

請問您能否提供詳細一點? –

+1

「標籤內標籤」是什麼意思? – Amy

回答

0

我在得到了個去這種模式的工作:

########TEMPLATEENGINE([^#]+)##############(((?!########TEMPLATEENGINE(?!\1)).)*)########TEMPLATEENGINE\1############## 

但目前爲止沒有運氣,我需要繼續前進 - 無論如何,我已經發布了它,因爲我認爲這種技術很有用。如果沒有人使用它,我會在稍後刪除它(或者修復它,如果可以的話),所以請不要投票 - 我不是聲稱它是一個完整的解決方案!

請注意,您需要迭代匹配表達式,首先捕獲內部標籤。

另請注意,######## TEMPLATEENGINEaccount:firstname ##############的結束標記似乎採用了與示例不同的格式(缺少它的#後綴) - 這是一個問題嗎?