我在Wikipedia's Reference Desk上问了这个问题,但没有回答。在我的第二次尝试用户Mr.98重定向我在这里,所以我在这里;)
我正在尝试编写自己的regexp解析器,因此我阅读了相关的W3C文档。标准文档XML Schema Part 2: Datatypes Second Edition为normal character
提供the following definition(有一个众所周知的缺少大括号的错误):
普通字符是任何不是元字符的XML字符。 (...)
[10] Char ::= [^.\?*+()|#x5B#x5D]
然后评论出现:
请注意,正常字符·可以表示为自身,也可以表示字符引用。 http://www.w3.org/TR/2000/WD-xml-2e-20000814#dt-charref
我的英语不是很流利,我不知道该怎么理解。如果作者特别强调用字符引用表示正常字符的可能性,那么我希望不允许metacharacters的这种表示。我在这一点上是对的吗?
如果我是,那么如果字符引用指定了元字符的代码点,比如星号,就像在a*
中一样?
a\*
(带星号转义)?我在Google上找到的所有示例都使用字符引用将元字符放在chargroups的character class expressions中。但是,Char
符号出现在regexp语法的制作9中,作为Atom
的三个版本之一,并且Atom
和Char
本身都不用于定义任何类型chargroup
- 使用了XmlChar
,而后者没有附加关于字符引用用法的评论。
请澄清我脑子里的烂摊子:
a*
应如何运作?[
和]
之间(character class expressions内)是否有效?•我们很抱歉,但作为垃圾邮件防护机制,新用户最多只能发布两个超链接。
嗯,我认为他们会帮助读者进入半兆字节W3C文档的适当部分。但是按照你的意愿去做 - 我已经将它们转换成难看的,难以阅读的普通文本。当然,我可能会完全脱离帖子 - 但我确实不相信机器人在这种情况下是正确的。
答案 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))?
没有