我想寫正則表達式來覆蓋我所有的情況。 我必須解析Xml並捕獲一些屬性。 例子:正則表達式:不是任意的非捕獲組
<item p2="2"/>
<item p1="1" p2="2"/>
<item p1="1" p2="2" p3="3"/>
<item p1="1" p2="2" p3="3" p4="4"/>
<item p1="1" p2="2" p3="3" p4="4" p5="5"/>
我必須抓住「P2」財產的價值,我知道,「P2」將始終存在於行。 另外,我想捕獲不會總是存在的「p4」屬性的值。
起初我想,以滿足前四例(前4行的示例中)和我寫的正則表達式是這樣的:
\<item.+?p2=\"(?<val1>\d+)".*?(?:p4=\"(?<val2>\d+)\")?\/\>
,它工作正常。 「val1」組總是返回值。如果顯示「p4」屬性,「val2」組返回值。
但要支付我的最後一種情況:
<item p1="1" p2="2" p3="3" p4="4" p5="5"/>
我已經修改了我的正則表達式是這樣的:
\<item.+?p2=\"(?<val1>\d+)".*?(?:p4=\"(?<val2>\d+)\")?.*?\/\>
______________________________________________________^^^
而且我發現,「VAL1」組仍返回值,但「值2」組不再返回所有案例的值。
你能告訴我我錯過了什麼,並幫助寫正則表達式來涵蓋我所有的情況嗎?
我沒有downvote你,但你的時間可能會更好地投入學習使用XML解析器。正則表達式對XML解析不太好。 –
在這裏使用正則表達式將是一個真正的麻煩。你能保證參數總是以相同的順序嗎?如果不是,您將不得不爲每個可能的訂單進行更改。使用XML解析器會更加理智和安全。 – Aaron
我知道寫正則表達式來解析Xml不是一個好主意。而且我已經使用其他工具來實施它。但是,雖然我的第一個實現發現了這種行爲,我想知道如何通過正則表達式來實現它。如果你想我可以重寫沒有Xml的例子。 – Aleksandr