首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式,用于检索xml的子标记,而不考虑其位置

正则表达式,用于检索xml的子标记,而不考虑其位置
EN

Stack Overflow用户
提问于 2013-04-03 07:57:06
回答 2查看 1.3K关注 0票数 0

哪个正则表达式检索带有分组表达式的标记的子标记(ASObject)内容之一,而不管该子标记在下面的xml中的位置。它可能是第一个,也可能是第二个。但是我想要检索ASObject,它有"postinjr“工资源代码,而不考虑它的位置。你可以在这里给我提供解决方案...http://gskinner.com/RegExr/?2usad

代码语言:javascript
运行
复制
<insuredwages>
    <ASObject mappedClass="com.taliantsoftware.claims.wages.InsuredWagesDTO" encoding="0">
        <wagescategorytypecode tagClass="String">postinjr</wagescategorytypecode>
        <agreementid tagClass="double">2654630.0</agreementid>
        <jobtitle tagClass="String">Worker</jobtitle>
        <createddatetime tagClass="Date">2012-10-01 13:28:05.213 CDT</createddatetime>
        <new tagClass="boolean">false</new>
        <employmentstatustypename tagClass="String">Disabled</employmentstatustypename>
        <updated tagClass="boolean">false</updated>
        <voided tagClass="boolean">false</voided>
        <wagescategorytypename tagClass="String">Post Injury</wagescategorytypename>
        <employmentstatustypecode tagClass="String">dsabld</employmentstatustypecode>
        <useridcreated tagClass="double">111.0</useridcreated>
        <userupdated tagClass="String"/>
        <recordid tagClass="double">1030237.0</recordid>
        <usercreated tagClass="String">TESTER QA</usercreated>
    </ASObject>
    <ASObject mappedClass="com.taliantsoftware.claims.wages.InsuredWagesDTO" encoding="0">
        <agreementid tagClass="double">2654630.0</agreementid>
        <wagescategorytypecode tagClass="String">preinjr</wagescategorytypecode>
        <createddatetime tagClass="Date">2012-10-01 13:28:00.291 CDT</createddatetime>
        <new tagClass="boolean">false</new>
        <updateddatetime tagClass="Date">2012-10-01 13:28:00.291 CDT</updateddatetime>
        <updated tagClass="boolean">false</updated>
        <voided tagClass="boolean">false</voided>
        <wagescategorytypename tagClass="String">Pre-Injury</wagescategorytypename>
        <useridcreated tagClass="double">111.0</useridcreated>
        <userupdated tagClass="String">TESTER QA</userupdated>
        <useridupdated tagClass="double">111.0</useridupdated>
        <recordid tagClass="double">1036667.0</recordid>
        <usercreated tagClass="String">TESTER QA</usercreated>
    </ASObject>
</insuredwages>
EN

回答 2

Stack Overflow用户

发布于 2013-04-03 16:14:54

你不需要。正则表达式完全不适合这个任务。使用XPath,它是为该作业设计的。

有关原因的解释,请参阅RegEx match open tags except XHTML self-contained tags -a StackOverflow经典。

票数 1
EN

Stack Overflow用户

发布于 2013-04-03 08:03:26

这将获取整个条目;

代码语言:javascript
运行
复制
/<ASObject.*?>postinjr</wagescategorytypecode>.*?</ASObject>/gs

。。但是强烈建议使用XML解析器来正确处理数据。

这里有一个RegExr的链接:http://regexr.com?34cfg

这将只获取它的内部(没有<ASObject> ... </ASObject>);

代码语言:javascript
运行
复制
/<ASObject.*?>(.*?>postinjr</wagescategorytypecode>.*?)</ASObject>/gs

。。和获取组1 ($1);http://regexr.com?34cfj

您应该在获取的内容上执行另一个RegEx,以分隔您已获取的子项。创建情景RegEx以准确地获取基于该内部值的数据,并按组分隔项目,这将是非常混乱的。

这是获取内部项的一个非常原始的开始,但它只会下一层,并且不会处理转义的斜杠和(</>/);

代码语言:javascript
运行
复制
/<.*?>(.*?)</.*?>/gs

http://regexr.com?34cfm

如果你真的想在一个RegEx中做所有的事情,你应该查看断言;

  • ?= Once Lookahead assertion
  • ?! Negative lookahead
  • ?<= Lookahead assertion
  • ?!= Negative Lookahead(或?<!)
  • ?> Once-only Subexpression
  • ?() Conditon [if then]
  • ?()|Condition [if then else]
  • ?# Comment

我将把这一切是如何工作的,留给你去研究;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15776576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档