2014-01-27 39 views
1

我有XML包含在一個字符串中有一個元素的許多無效的XML標記,其中一個標記是「無效」,如果它以數字開頭。例如,以下是無效的:使用Regex獲取所有無效的XML標記的列表?

<1>....</1>, <123abc>, etc. 

在XML中,我們會找出某些標記爲無效:

<tag1> ----> valid tag 
    <1tagname>....</1tagname> --->invalid tagname 
    <2tagname>....</2tagname> --->invalid tag name 
</tag1> ----> valid tag 

我想獲取無效的XML標籤的列表,我想添加一個特殊字符串作爲前綴讓我們說「項目」,以便將無效轉換爲有效的標籤名稱。

我正在使用Java語言兼容的正則表達式。

+0

無效標籤平均? – Kick

+0

你能舉個例子嗎? – Mzf

+0

無效標籤名稱意味着它不應以數字開頭。 – abhijeet

回答

1

您可以使用此:這是沒有關閉標籤

String result = yourstr.replaceAll("(?<=</?)(?=[0-9])", "item"); 
+0

真棒!非常感謝 !! – abhijeet

-1

您可以使用堆棧。

說明:

它像發現如果括號表達式是有效的。 你的代碼應該像這樣工作:

  1. 讀取XML
  2. 對於每個打開的標記,將其推入堆棧
  3. 對於每一個結束標籤,它與堆棧的頂部比較
  4. 如果他們不匹配 - 標記爲問題 - 添加前綴
  5. 如果它們匹配 - 彈出堆棧的
  6. 當讀完XML和有堆棧中的元素 - 添加前綴和關閉標籤

這將解決簡單的情況。 有一些邊緣的情況下,像具有無與倫比的關閉標籤合法標籤內,也許更

+0

唯一的問題是沒有XML解析器會成功處理格式不正確的XML。 –

+0

@MichaelKay - 你不需要xml解析器,你可以在字符串上運行,尋找打開/關閉標記 – Mzf

+0

好吧,我讀「讀取XML」爲「將輸入解析爲XML」。關鍵是輸入不是XML,我們正在尋找的東西不是(有效)標籤;我們正在閱讀一些近似於XML的內容,並尋找近似於打開和關閉標籤的內容。 –

相關問題