用于验证XML中标记之间内容的正则表达式

时间:2013-05-18 02:37:48

标签: java xml regex

我正在尝试使用正则表达式来验证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,它表示无效

我不确定我哪里出错了。任何人都可以纠正我的正则表达吗?

2 个答案:

答案 0 :(得分:0)

试试这个

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

答案 1 :(得分:0)

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

在这种情况下,我希望结果会失败,因为其中一个标签之间有123a。但是测试通过,因为它发现第一个有效,因为它之间有123个。因此我想知道在这种情况下我是否应该使用正则表达式或者是否有替代方案...谢谢