2014-01-09 51 views
0

昨晚一個值或組,我決定學習正則表達式,以創建一個「測試」腳本解析器,我已經成功的變量:)AS3正則表達式,檢索在

方面這樣做這是AS3正則表達式,我用它來分析變量(不知道這是否可以簡化,但是這是我腦子裏浮現):

/\s*>(\w+)\s*=\s*(?:(?:"(.*?)")|>(\w+))\s*/gsm 

解析的變量,採用這種格式(例如1):

>ReferenceTestVariable = "Hello World" 

或.. (例如2):

>TestVariable2 = >ReferenceTestVariable 

的問題是與分組,我不知道如何字這個正確的,但這是我的正則表達式輸出例如1作爲數組

[1]=ReferenceTestVariable, [2]=Hello World, [3]= 

這是輸出例如2:

[1]=TestVariable2, [2]=, [3]=ReferenceTestVariable 

如何將修改的組操作者=後,使其所以指數[2]和[3]被接合看到,因爲既索引2和3是值的variabl e商店?此外,我會如何修改正則表達式允許這樣的事情:

>Test = "String", >Referencevariable, "Another String", "More strings", >Variable2 
+0

您不能合併來自不同備選方案的組。你只需要讓你的腳本檢查哪一個是非空的並使用它。 – Barmar

+0

謝謝Barmar我不知道。這就是我目前正在做的事情,我認爲可以用正則表達式本身來簡化它。但是如果我想將'Test'的所有值存儲到一個數組中,無論它存儲了一個字符串還是一個引用,我將如何去做最後一個例子? –

+0

例如1中的引號位於'index [2]'中,你可以嗎?這是我能看到的將他們結合起來的唯一方法。 – Barmar

回答

0

我想這應該這樣做:

/\s*>(\w+)\s*=\s*(".*?"|>\w+)/gsm 

index[2]將周圍的引號的情況下,1,或者如果有>開始2.

要做到第二,這將是:

/\s*>(\w+)\s*=\s*((?:(?:".*?"|>\w+)\s*,\s*)*(?:".*?"|>\w+))/gsm 

但是,當您這樣做時,所有以逗號分隔的值將在index[1]中一起顯示。正則表達式引擎通常不提供分別與*+匹配的每個值的方式。

DEMO

+0

這應該做一些簡單的字符串操作!任何想法或做最後一點的方法都將是一個獎勵!感謝您的幫助Barmar :) –

+0

增加了額外的信用答案。 – Barmar