使用分组表达式检索标记的子标记(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>
答案 0 :(得分:1)
你没有。正则表达式完全不适合这项任务。使用专为此工作而设计的XPath。
有关原因的解释,请参阅RegEx match open tags except XHTML self-contained tags - StackOverflow经典。
答案 1 :(得分: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,以分隔您已获得的子项。使情境RegEx基于该内部值精确获取数据并按组分开项目将非常混乱。
这是获取内部项目的一个非常原始的开始,但它只会降低一个级别而不会处理转义斜杠和(<
/ >
,/
);
/<.*?>(.*?)</.*?>/gs
如果你真的想在一个RegEx中做所有事情,你应该研究断言;
?=
Lookahead断言?!
否定前瞻?<=
Lookbehind断言?!=
负面观察(或?<!
)?>
一次性Subexpression ?()
条件[if then]
?()|
条件[if then else]
?#
评论我会离开,这一切是如何运作的,给你研究;)