正则表达式在XML中找到带有可变字符的精确长度

时间:2014-11-11 22:32:53

标签: xml regex

有没有办法在XML中的指定标签之间找到可变的固定长度字符,如下所示

<Event id="2965652b-f7b7-4539-abb6-33cae0fca2d1" name="updateInfo" eventType="updateInfo">
    <eventTime>2014-11-11T06:35:22Z</eventTime>
    <eventAttributes>
      <EventAttribute>
        <name>userId</name>
        <value>9376BDA4-A187-4CFF-8A49-482A4FD514F4</value>
      </EventAttribute>
    </eventAttributes>
  </Event>
<Event id="4909eb79-f807-42f5-8281-27485ee68956" name="login" eventType="login">
    <eventTime>2014-11-11T06:35:21Z</eventTime>
    <eventAttributes>
      <EventAttribute>
        <name>userId</name>
        <value>9376BDA4-A187-4CFF-8A49-482A4FD514F4</value>
      </EventAttribute>
    </eventAttributes>
  </Event>

我在下面尝试了[1]:http://www.regexr.com/但没有运气

<Event id="2965652b-f7b7-4539-abb6-33cae0fca2d1" name="updateInfo" eventType="updateInfo"><eventTime>.{20}<\/eventTime><e...

我想验证XML中是否存在以下文本。由于2014-11-11T06:35:22Z是一个可以添加正则表达式的变量

<Event id="2965652b-f7b7-4539-abb6-33cae0fca2d1" name="updateInfo" eventType="updateInfo">
        <eventTime>2014-11-11T06:35:22Z</eventTime>
        <eventAttributes>
          <EventAttribute>
            <name>userId</name>
            <value>9376BDA4-A187-4CFF-8A49-482A4FD514F4</value>
          </EventAttribute>
        </eventAttributes>
      </Event>

最后,我将此搜索文本传递给grep命令并尝试从文件夹中提取XML文件名,然后在groovy代码中使用records = new XmlParser().parseText(eventFile)来验证元素。

1 个答案:

答案 0 :(得分:1)

您的正则表达式不考虑<eventTime>标记前面的换行符和空格。在\s*之间添加><即可获得它。即

<Event id="2965652b-f7b7-4539-abb6-33cae0fca2d1" name="updateInfo" eventType="updateInfo">\s*<eventTime>.{20}<\/eventTime>

并不是说这非常强大或者否定了其他人对使用正确的XML解析器的看法(这是最好的主意)。