正则表达式匹配XML节点

通过这则表达式匹配一下xml文件中parent节点

<xml>

    <parent id="parent1"/>

    <parent id="parent2">

        <child name="child1"/>

    </parent>

    <parent id="parent3">

        <child name="child1"/>

    </parent>

<xml>

正则表达式的为:<parent[^>]*?(?=/>|>)(/>|>(?<!/>)(\S|\s)*?</parent>)

简单说明一下

第一步

通过:<parent[^>]*?(?=/>|>)的用处是尽可能多的匹配单一节点和有子节点的parent最大内容这里可以匹配到每一行的引号部分.通过正向肯定预查(?=/>|>)来确保查询parent1的时候不含后面的斜杠(/),加上这个只是为了容易理解匹配起来该觉比较整齐.

第二步

通过或(|)来匹配两种形式如果类似parent1的节点直接通过/>匹配余下的两个字符,如果含有child节点,在首先补上>,然后通过反向否定预查(?<!/>)确保前面的>是"<parent

id="parent2">"中的>而不是"/>"中的>,也就是后面的表达式匹配parent2以后的内容,其中(\S|\s)*?以非贪婪的形式匹配</parent>之前的内容,若果贪婪的方式则会匹配到parent3的</parent>.

仅仅通过这个例子来学习正则表达式的预查使用实际表达式可以简化为 : <parent[^>]*(/>|>(\S|\s)*?</parent>)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值