內容

2014-02-05 60 views
0

我怎樣才能在整個文件獲取下面標記的價值屬性中的內容內容

<h:graphicImage .... value="*1.png*" ...../> 
<h:graphicImage .... value="*2.png*" ....>...</h:graphicImage> 

我的正則表達式搜索結果應導致成

  • 1.png
  • 2.png

所有我能找到的是爲MULT內容簡單的結尾標籤,但單個結束標籤又如何呢?

+0

您不應該使用正則表達式來嘗試解析xml/html。這是爲什麼的經典答案:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags#answer-1732454。用一個解析器代替,你可以避免幾個小時的時間把你的頭撞到奇怪的bug上。 – Robin

回答

1

相反,使用XML解析器,正則表達式無法真正地解析XML,除非您知道輸入始終會遵循特定的表單。

然而,這裏是一個正則表達式,你可以用它來提取h:graphicImage標籤屬性的值,但後讀取的告誡:

<h:graphicImage[^>]+value="\*(.*?)\*" 

1.png2.png將是第一個拍攝小組。

注意事項:

  • 這裏我假設你1.png2.png等總是被星號包圍這是它從你的問題似乎(這是什麼\*是)
  • 這如果其中一個屬性中有一個「>」字符的正則表達式會失敗,例如

    <h:graphicImage foo=">" value="*1.png*" 
    

    這是我之前對正則表達式提到內華達州呃能夠正確解析XML。 您可以解決此通過調整你的正則表達式:

    <h:graphicImage.+?+value="\*(.*?)\*" 
    

    但是,這意味着,如果你有<h:graphicImage /><foo value="*1.png*">然後從foo標籤1.png提取出來,當你只想從graphicImage標籤提取。 同樣,正則表達式將總是有極端案例以XML的問題,所以你需要根據你的應用程序(例如,如果你知道只有的graphicImage的標籤將永遠有一個「值」屬性進行調整,那麼第二種情況可能比第一種情況好)。