我正在使用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正则表达式文字,请不要忘记使用斜杠。