0

使用分组表达式检索标签的子标签(ASObject)内容之一的正则表达式是什么,而与以下xml中子标签的位置无关。它可能是第一个或第二个。但我想检索具有“postinjr”工资源代码的 ASObject,无论其位置如何。您可以在这里为我提供解决方案... http://gskinner.com/RegExr/?2usad

<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>
4

2 回答 2

1

你没有。正则表达式完全不适合这项任务。使用专为这项工作设计的 XPath。

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

于 2013-04-03T08:14:53.830 回答
0

这将获取整个条目;

/<ASObject.*?>postinjr</wagescategorytypecode>.*?</ASObject>/gs

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

这是 RegExr 的链接:http: //regexr.com?34cfg

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

/<ASObject.*?>(.*?>postinjr</wagescategorytypecode>.*?)</ASObject>/gs

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

您应该对获取的内容执行另一个 RegEx 以分隔您拥有的子项目。制作情境正则表达式以根据该内部值准确获取数据并按组分隔项目将非常混乱。

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

/<.*?>(.*?)</.*?>/gs

http://regexr.com?34cfm

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

  • ?= 前瞻断言
  • ?! 负前瞻
  • ?<=后向断言
  • ?!=负后视(或?<!
  • ?> 一次性子表达式
  • ?()条件[if then]
  • ?()|健康)状况[if then else]
  • ?# 评论

我会离开,这一切是如何运作的,让你去研究;)

于 2013-04-03T00:03:26.363 回答