XML文档需要正则表达式

时间:2011-11-11 13:17:30

标签: c++ visual-c++ mfc

需要单个正则表达式来查找

  1. 双倍空格
  2. 突片
  3. 额外输入(换行/回车)
  4. 标记之间的换行符
  5. 关闭标签之后/之前的空格
  6. 在XML文档中。

2 个答案:

答案 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;

demo