日志文件的正则表达式

时间:2013-03-06 08:38:35

标签: regex vbscript vb6

我有这样的日志文件:

<CL>
text sample1
<CL>
<CL>
<TR></TR>
</CL>
<CL>
<CL>
<CL>
<TR1></TR1>
</CL>
<CL>
text sample2
<CL>
text sample3
<CL>
<TR1>
<TR2></TR2>
</TR1>
</CL>

我需要编写返回的正则表达式 此文件中的有效xml。我需要这个结果:

<CL>
<TR></TR>
</CL>

<CL>
<TR1></TR1>
</CL>

<CL>
<TR1>
<TR2></TR2>
</TR1>
</CL>

这种变化对我不起作用:

<CL>[\s\S]*?(<CL>[\s\S]+?</CL>)

提前致谢。

2 个答案:

答案 0 :(得分:2)

正如我所经历的那样,正则表达式对于XML文件验证,解析和阅读来说并不是那么好。

最好使用DOM PARSER解决方案解决此问题。他们中的大多数都有验证方法。 在php:http://php.net/manual/en/book.simplexml.php(很多工作)

或PHP简单HTML DOM解析器:http://simplehtmldom.sourceforge.net/(只需读取xml文件并打印从xml创建的对象,并获取有效的xml结构,因为我记得它不仅适用于HTML结构) 在java:JSOUP库http://jsoup.org/(与php中的simpledom几乎相同)

首先,有效的xml文件应包含根标记 (就像html文件中的HTML标记一样,包装文档)

我希望这可以帮助你

答案 1 :(得分:1)

此正则表达式适用于您的示例

"<CL>((?!<CL>).)*?(?:<TR[\\d]*?>)+.*?(?:</TR[\\d]*?>)+.*?</CL>"

注意,依赖于编程语言,您应该设置Singleline正则表达式选项以使此正则表达式正常工作

在某些语言中

编辑没有必要逃避\ d,所以也试试

"<CL>((?!<CL>).)*?(?:<TR[\d]*?>)+.*?(?:</TR[\d]*?>)+.*?</CL>"

EDIT2 如果您只想捕获cl标记内容,可以直接使用:

<CL>((?!<CL>).)*</CL>