2013-03-25 87 views
1

我有一個字符串與一些嵌入式變量,我需要提取這些變量的名稱。我不熟悉正則表達式,並且無法使其正常工作。正則表達式模式嵌套在其他模式

這裏是和實例的字符串的樣子:

Lorem存有悲坐阿梅德{%#varName1%},consectetur adipisicing #non_var ELIT,sed的

{%#varName2 | PROP1%}做的eiusmod tempor incididunt ut labore et dolore magna aliqua

{%identifier#varName3 | prop2%}。 U en minim minim ven ven ven ven ven ven

變量名的前綴爲#和被放置在這些分隔符{%%}內部。使用這種表達我可以匹配的變量名:

(?<=#)(.*?)(?=[\s\|]) 

然而,這也符合#non_var這不是分隔符中,是不是有效的變量。

我也試過這樣:

(?<={%)(#(.*?)[^\s\|])(?= %}) 

但是,只有匹配#varName1#varName2|prop1(對此我不需要prop1部分)。預期結果匹配:

varName1varName2varName3

任何建議將不勝感激。

回答

1

由於您尚未提及正在使用哪種語言/應用程序,因此我會給出一般用例;我自己已經在Notepad ++中成功地嘗試了它。

您可以使用正則表達式:

(\{%[^#]*#)([\w]*)(.*?%\}) 

這裏varname可以由字母,數字和下劃線的任意長度。如果要強制執行的條件,變量名的第一個字符可能不是一個數字,可以使用:

(\{%[^#]*#)([a-z_][\w]*)(.*?%\}) 

這將承認之間幷包括{%%}一切。現在,您可以使用反向引用訪問第二個匹配的子表達式(Notepad ++中的$2;許多編程語言中的\2)以獲得varnames

您的輸入文字,

Lorem存有悲坐阿梅德{%#varName1%},consectetur adipisicing #non_var ELIT,sed的{%#varName2 | PROP1%}做eiusmod tempor incididunt UT labore等dolore magna aliqua {%identifier#varName3 | prop2%}。 U en minim minim ven ven ven ven ven ven

我的搜索和替換給我

Lorem存有胡蘿蔔varName1,增強回扣#non_var開發商,但varName2給occaecat時間和活力,如勞動和肥胖varName3。多年來來。

+0

出色答卷。由於 – Bogdan 2013-03-25 16:42:44

+0

@Bogdan,樂意提供幫助。 :) – 2013-03-25 16:53:50

+1

做了一些調整,這'(?:\ {%[^#] *#)([\ W] *)(?:?*%\})僅捕獲變量名。感謝 – Bogdan 2013-03-25 16:56:27

0

試試這個 - 1認爲這是正確的,

(?<=\{%.*#)[\w|]+(?=.*%\})