XML正则表达式语法

时间:2011-05-01 20:23:51

标签: regex syntax xsd

我在Wikipedia's Reference Desk上问了这个问题,但没有回答。在我的第二次尝试用户Mr.98重定向我在这里,所以我在这里;)

我正在尝试编写自己的regexp解析器,因此我阅读了相关的W3C文档。标准文档XML Schema Part 2: Datatypes Second Editionnormal character提供the following definition(有一个众所周知的缺少大括号的错误):

  

普通字符是任何不是元字符的XML字符。 (...)

     

[10] Char ::= [^.\?*+()|#x5B#x5D]

然后评论出现:

  

请注意,正常字符·可以表示为自身,也可以表示字符引用。 http://www.w3.org/TR/2000/WD-xml-2e-20000814#dt-charref

我的英语不是很流利,我不知道该怎么理解。如果作者特别强调用字符引用表示正常字符的可能性,那么我希望不允许metacharacters的这种表示。我在这一点上是对的吗?

如果我是,那么如果字符引用指定了元字符的代码点,比如星号,就像在a*中一样?

  1. 这个表达式是无效的吗?
  2. 或者更确切地说,引用隐式变为普通字符,表达式等同于a\*(带星号转义)?
  3. 别的什么?
  4. 我在Google上找到的所有示例都使用字符引用将元字符放在chargroupscharacter class expressions中。但是,Char符号出现在regexp语法的制作9中,作为Atom的三个版本之一,并且AtomChar本身都不用于定义任何类型chargroup - 使用了XmlChar,而后者没有附加关于字符引用用法的评论。

    请澄清我脑子里的烂摊子:

    • 使用字符引用指定的元字符是否成为普通字符? a*应如何运作?
    • 字符引用在[]之间(character class expressions内)是否有效?
      

    •我们很抱歉,但作为垃圾邮件防护机制,新用户最多只能发布两个超链接。

    嗯,我认为他们会帮助读者进入半兆字节W3C文档的适当部分。但是按照你的意愿去做 - 我已经将它们转换成难看的,难以阅读的普通文本。当然,我可能会完全脱离帖子 - 但我确实相信机器人在这种情况下是正确的。

1 个答案:

答案 0 :(得分:0)

使用字符引用指定的元字符是否会成为普通字符? a *应该如何工作?

不,它变为a*而*仍然是一个元字符,可以转义为\*

来到下一个问题:

来自http://msdn.microsoft.com/en-us/library/ms256185.aspx

charRange ::= seRange | XmlCharRef | XmlCharIncDash

其中

XmlCharRef ::= ( '&#' [0-9]+ ';' ) | ('&#x' [0-9a-fA-F]+ ';' )

但是从w3开始,

charRange ::= seRange | XmlCharIncDash

不包括XmlCharRef。所以,

是[和]之间有效的字符引用(在字符类表达式内部(http://www.w3.org/TR/xmlschema-2/#dt-charexpr))?

没有