2013-05-18 67 views
0

我正嘗試使用正則表達式來驗證XML文件中的內容。我嘗試了以下事情。用於驗證XML中標籤之間內容的正則表達式

XML文件1:

<start> 
    <hi>2dsds</hi> 
    <expected xmlns="sw2223" xmlns=\"\">123</expected>   
    <bye>2dsds</bye> 

XML文件2:

<start> 
    <hi>2dsds</hi> 
    <Somethingexpected xmlns="sw2223" xmlns=\"\">123</Somethingexpected> 
    <bye>2dsds</bye> 

在這兩個XML文件,我關注的領域<expected><Somethingexpected>之間的內容。我希望內容之間的每個領域都是數字。

有效內容:

<Somethingexpected xmlns="sw2223" xmlns=\"\">123</Somethingexpected> 
<Expected xmlns=\"\">123</Expected> 
<expected xmlns=\"\">123</expected> 

無效的內容:

<Somethingexpected xmlns="sw2223" xmlns=\"\">123a</Somethingexpected> 
<Expected xmlns=\"\">avbv 123</Expected> 
<expected xmlns=\"\">**(***</expected> 

我不需要其他任何標籤之間的數字(甚至沒有空格)

我曾嘗試使用這些正則表達式:

if(String.matches(".*<.*[eE]xpected.*?>.*[a-zA-Z].*<.*") || 
     String.matches(".*<.*[eE]xpected.*?>.*[^0-9].*<.*"))  
     return invalid; 
    else 
     return valid; 

輸入1:

<Somethingexpected xmlns="sw2223" xmlns=\"\">123</Somethingexpected> 

輸入2:

<start>  
    <hi>2dsds</hi> 
    <Somethingexpected xmlns="sw2223" xmlns=\"\">123</Somethingexpected> 
    <bye>2dsds</bye> 

對於輸入1,則該說有效。對於輸入2,它說無效

我不知道我哪裏出錯了。任何人都可以糾正我的正則表達式嗎?

+0

首先,你對原始XML使用正則表達式。使用XPath首先提取值。 –

回答

0

試試這個

boolean mathes = str.matches(".*<(Expected|expected|Somethingexpected).*?>\\d+</\\1>.*"); 
+0

令人敬畏的夥伴..它的工作..我也像以下一樣即興創作。我沒有具體說明什麼期望..它可能是甚至沒有預期(即任何預期之前)如此「。* <(。* [ Nn] odeId)。*?> \\ d +。*「..現在它工作..只是想知道這是什麼\\ 1的意思..謝謝.. – user2395899

+0

這意味着」什麼組1匹配「。組1是()中的內容。作爲用於<預期..必須有 –

+0

123 123A 在這種情況下,我期望結果會失敗,因爲其中一個標記之間有123a。但測試通過,因爲它找到的第一個爲它具有123之間有效.. 因此我想知道是否shoudn't我是在這種情況下使用正則表達式在所有或有此替代..謝謝.. – user2395899

0
<Somethingexpected xmlns="sw2223" xmlns=\"\">123</Somethingexpected> <Somethingexpected xmlns="sw2223" xmlns=\"\">123a</Somethingexpected> 

在這樣的情況下,我期望的那樣有標籤之一之間123A的結果應該失敗。但測試通過,因爲它找到的第一個是有效的,因爲它有間123 ..因此,我想知道是否shoudn't我被使用正則表達式在所有在這種情況下或有此替代..由於

相關問題