我正在使用JavaScript正则表达式/(<mos>[\s\S]*?<\/mos>)/g在看起来大致如下的日志文件中查找XML块:

Entry 1: <mos>...</mos>
Entry 2: <mos>...</mos>


但是,有时日志记录过程会遇到错误,并且没有完成向文件的写入操作,在这种情况下,它看起来像这样:

Entry 1: <mos>Error!
Entry 2: <mos>...</mos>


发生这种情况时,正则表达式会匹配从条目1中的开始<mos>标记到条目2中的结束</mos>标记的所有内容,这会在以后处理XML时引起问题。

似乎以某种方式先匹配结束标记,然后再查找其对应的开始标记可以避免这种情况,但是我不知道如何执行此操作,或者不知道使用正则表达式是否可行。



说明:由开始和结束标记分隔的块中的...可以包含换行符。

最佳答案

这应该适合您的需求:

<mos>((?:[\s\S](?!<mos>))+?)</mos>




通过Debuggex可视化

RegExr上的演示



如果使用JS正则表达式文字,请不要忘记使用斜杠。

09-15 16:39