-1

我有这样的日志文件:

<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>)

提前致谢。

4

2 回答 2

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 标记一样,它包装了文档)

我希望这可以帮助你

于 2013-03-06T08:52:48.110 回答
1

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

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

请注意,依赖于编程语言,您应该设置Singlelineregex 选项以使此 regex 工作

在某些语言中编辑不需要转义\d,所以也试试

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

EDIT2如果您只想捕获 cl 标签内容,您可以简单地使用:

<CL>((?!<CL>).)*</CL>
于 2013-03-06T08:56:40.423 回答