正则表达式匹配XML组

时间:2016-09-23 22:12:22

标签: regex xml

就像免责声明一样,我只是想这样做,以便在阅读日志时让我的生活更轻松..有时他们有超过100mb的文字

我想匹配一个包含一些数据的XML组。

假设我有一个类似下面的XML(并且它们在同一行中):

<car><id>1</id><acquiredDate>23-09-2016</acquiredDate><model>BMW</model></car>
<car><id>2</id><acquiredDate>23-09-2016</acquiredDate><model>BMW</model></car>
<car><id>3</id><acquiredDate>24-09-2016</acquiredDate><model>BMW</model></car>
<car><id>4</id><acquiredDate>23-09-2016</acquiredDate><model>BMW</model></car>

我想匹配所有在23-09-2016获得的汽车。 (在这种情况下匹配3场)

到目前为止我所拥有的是<car>.*?<acquiredDate>23-09-2016<\/acquiredDate>.*?<\/car>,但它将匹配第三辆和第四辆车。 类似的东西:

<car><id>1</id><acquiredDate>23-09-2016</acquiredDate><model>BMW</model></car>

<car><id>2</id><acquiredDate>23-09-2016</acquiredDate><model>BMW</model></car>

<car><id>3</id><acquiredDate>24-09-2016</acquiredDate><model>BMW</model></car><car><id>4</id><acquiredDate>23-09-2016</acquiredDate><model>BMW</model></car>

我尝试使用像<car>(?!.*<car>.*).*?<acquiredDate>23-09-2016<\/acquiredDate>.*?<\/car>这样的东西,但它只匹配最后一个。

我是如何实现的?

1 个答案:

答案 0 :(得分:1)

如果确实想要沿着正则表达式匹配-html路线走下去,那么假设您想要匹配整条线路,那么这样的话会起作用:

/(?:^\<car\>[<\w>\/]+acquiredDate\>)(23\-09\-2016)(?:.+$)/gm
                                     ^^  ^^  ^^^^ 
                                 (change as required)