2012-10-08 115 views
1

我想匹配一個xml元素併爲可選屬性創建一個組。如果該屬性不存在,那麼我將執行一些其他操作。例如我有匹配可選捕獲組

<customer display="no"> 

我想匹配客戶元素,但顯示屬性可能不存在。在代碼中,我將檢查該捕獲組是否爲空,如果是這樣,請執行一些自定義邏輯。

所以正則表達式我已經是

<customer.*(display="yes|no").*?> 

與元素相匹配確定,當它具有屬性,但我怎樣才能使組選,所以我可以檢查,以查看是否含有元素?

+0

不要使用正則表達式進行XML解析!根據你使用.NET的標籤。在.NET中,我們有XmlReader,XmlDocument和XDocument - 用於處理XML的標準類。 –

回答

1

你可以在組後面加一個問號,就像正則表達式的任何其他可選組件一樣。如果您這樣做,您還必須製作第一個.*懶惰(通過添加?),否則它將消耗整條線。

所以,你應該有這樣的事情:

<customer.*?(display="yes|no")?.*?> 

還要注意的是(display="yes|no")可能不符合你希望它是什麼:它匹配display="yesno"display="yes"display="no"。我懷疑你想要(display="(?:yes|no)")

+0

是的,我剛纔發現問題是第一個。*是貪婪的,應該是。*? –

0

試試這個正則表達式:

<customer.*?(display="(?:yes|no)").*?> 

解釋:

?

匹配前面的元素零次或一次。

*?

零次或多次,但隨着幾次匹配前面的元素成爲可能。

(?: subexpression)

定義非捕獲基團。

+0

我試過了,但是它讓比賽變得貪婪,但我只知道那是因爲第一次任何角色比賽都很貪婪。