首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML文档所需的正则表达式

问XML文档所需的正则表达式
EN

Stack Overflow用户
提问于 2011-11-11 13:17:29
回答 2查看 1K关注 0票数 0

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

  1. 双空间
  2. 制表符
  3. 额外输入(换行/回车)
  4. 标签间断线
  5. 结束标签后/结束前的空格

在XML文档中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-12 05:51:13

通常,您需要一个xml解析器来处理xml文档。正则表达式不足以处理所有情况。。

对regexes使用perl语法:

代码语言:javascript
复制
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;

演示

票数 0
EN

Stack Overflow用户

发布于 2011-11-11 13:40:31

很抱歉,这不会是一个很好的答案,但也许我能帮上一点忙。现在,对于步骤1、2和3,要匹配这样的步骤并不困难。

标签是\t

新行为\r或\n

空白(空格、制表符或新行)为\s。

因此1制表符:(T)两个空格= (\s\s)或(s{2})和一条额外的行通常由一行中的两个行分隔,但有时它们可以用空格分隔,所以请注意.(\*\r)\n*\n)

要将其结合起来,步骤1/2/3包含了捕获组:

代码语言:javascript
复制
  (\r\s*\r)|(\n\s*\n)|(\t)|(\s{2})

但是4和5呢?

如果<没有对应的>,或者不是文档结构的一部分,那么它们都需要能够在正则表达式中回溯。这种情况可能发生在无效的XML中,或者发生在CDATA部分等等。它变得很复杂,但是可以用递归正则表达式来完成。但是,我不知道c++中有一个正则表达式库支持递归。对不起,但是手工解析字符串数据可能要容易得多。

现在,一些正则表达式方言是不同的,所以您的里程可能会有所不同。作为参考,虽然我倾向于使用http://www.regular-expressions.info/quickstart.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8094527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档