2013-05-18 44 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我被使用正则表达式在所有在这种情况下或有此替代..由于

相关问题