请帮帮我。我需要查找包含<field id="0" value="0200"/>
和<field id="24" value="001"/>
的所有日志。我使用这个正则表达式<log.+?<field id="0" value="0200"/>.+?<field id="24" value="001"/>.+?</log>
使用Notepad ++,但效果不佳。
<log>
<receive>
<isomsg direction="incoming">
<header>6008610000</header>
<field id="0" value="0200"/>
<field id="3" value="440000"/>
<field id="11" value="000001"/>
<field id="24" value="001"/>
<field id="41" value="12345678"/>
<field id="42" value="0000012345678"/>
</isomsg>
</receive>
</log>
<log>
<receive>
<isomsg direction="incoming">
<header>6008610000</header>
<field id="0" value="0300"/>
<field id="3" value="440000"/>
<field id="11" value="000002"/>
<field id="24" value="002"/>
<field id="41" value="12345678"/>
<field id="42" value="0000012345678"/>
</isomsg>
</receive>
</log>
<log>
<receive>
<isomsg direction="incoming">
<header>6008610000</header>
<field id="0" value="0200"/>
<field id="3" value="440000"/>
<field id="11" value="000002"/>
<field id="24" value="001"/>
<field id="41" value="12345678"/>
<field id="42" value="0000012345678"/>
</isomsg>
</receive>
</log>
<log>
<receive>
<isomsg direction="incoming">
<header>6008610000</header>
<field id="0" value="0200"/>
<field id="3" value="440000"/>
<field id="11" value="000002"/>
<field id="24" value="004"/>
<field id="41" value="12345678"/>
<field id="42" value="0000012345678"/>
</isomsg>
</receive>
</log>
答案 0 :(得分:0)
首先,您应该为此目的使用一些XML解析器。
如果你真的想用正则表达式做这件事,你需要注意:
.+
通配符与新行字符不匹配。请改为[\s\S]+
,<log></log>
块匹配。编辑:
如果正则表达式是唯一的选项,并且您只想查找所提到的字段的所有出现,那么您可以尝试一些丑陋的正则表达式,例如
((<field id="0" value="0200".*)\s*((<field.*)*\s*)*?(<field id="24" value="001".*))+?|((<field id="24" value="001".*)\s*((<field.*)*\s*)*?(<field id="0" value="0200".*))+?`
表示:匹配以<field id="0" value="0200"
开头的文字,而不只有<field.*
行,以<field id="24" value="001".*
结尾或以<field id="24" value="001".*
等开头。
答案 1 :(得分:0)
Notepad ++不支持多行正则表达式。