需要单个正则表达式来查找
在XML文档中。
答案 0 :(得分:0)
对不起,这不是一个很好的答案,但也许我可以帮助一点。现在对于步骤1,2和3,不难以匹配
标签是\ t
新行是\ r或\ n
空格(空格,制表符或换行符)是\ s
所以1个标签:(\ t) 两个空格=(\ s \ s)或(\ s {2}) 并且通常由连续的两个换行符找到一条额外的行,但有时它们可以用空格分隔,所以要小心......(\ r \ s * \ r)|(\ n \ s * \ n)< / p>
将所有内容放在一起,步骤1/2/3是捕获组:
(\r\s*\r)|(\n\s*\n)|(\t)|(\s{2})
但是4和5呢?
嗯,他们都要求能够在&lt;&lt;没有相应的&gt;,或者不是文档结构的一部分。这可能发生在无效的XML或CDATA部分等中。它变得复杂但可以使用递归正则表达式完成。但是我不知道c ++中支持递归的正则表达式库。对不起,但是手动解析字符串数据可能要容易得多。
现在一些正则表达方言不同,所以你的里程可能会有所不同。虽然我倾向于使用,但供参考 http://www.regular-expressions.info/quickstart.html
答案 1 :(得分:0)
通常,您需要一个xml解析器来处理xml文档。 Regular expressions are not powerful enough to handle all cases
对正则表达式使用perl语法:
m{
[ ][ ] # double spaces
|
\t # tab
|
$\s*$ # extra enter separated only by whitespace. Note: requires `m` flag
|
# XXX: it works only on simple xml
<[^<>]*$[^<>]*> # line break inside tag
|
# XXX: it works only on simple xml
[ ]</[^<>]+> |
</[^<>]+>[ ] # space after/before closing tag
}mxg;