2012-05-16 40 views
0

某些XML屬性我有以下格式的文檔:正則表達式:獲取從特定的XML元素

<scheme attr1="lorem" attr2="ipsum" global-test="text goes here" global-attr2="second text goes here"> 
</scheme> 

我想用正則表達式來提取所有匹配global-(.*)的屬性。 它也只能匹配「scheme」元素,因此使用簡單的正則表達式(如(global-([^=]*)="([^"]*)")+)不是一個選項。我試過以下的正則表達式:

<scheme.*([\s]+global-([^=]*)="([^"]*)")+ 

但這隻會匹配「全球attR2位」,並看到其他全局屬性爲*選擇的一部分。使*選擇器開啓。*懶惰似乎也沒有幫助。

而且我知道使用正則表達式從XML文檔獲取數據不是一個好習慣,但是這個腳本是針對預處理器的。它在解析它之前修改XML。

回答

0

A preg_match_all將匹配所有內容並存儲所有內容。因此,首先對「<方案」匹配,如果匹配,然後運行preg_match_all對陣像

/global-(.*?)=(\w+)/ 

,然後從matches[0]matches[1]提取物等

0

我相信(...)+構造不能按照您的預期工作。它會打破你以前的比賽,只保存最後一場比賽,而不是擴大比賽組數組。

嘗試匹配(。)*並查看它是否適用於您的PHP設置。

我試圖

<scheme(.*?[\s]+global-([^=]*)="([^"]*)")+ 

,我認爲應該工作,如果(...)+表現不同。