如果有人可以解释如何解释以下正则表达式,我将不胜感激;它来自Namespaces in XML 1.0的W3C参考,并将NCName([4])定义为:
名称 - (字符*':'字符*)/ * XML名称,减去“:”* /
我可以理解应用于列表时的减法,例如:
[a-z- [aeiuo]]表示所有辅音的列表(请参阅http://www.regular-expressions.info/charclasssubtract.html),但在应用于组时则不会(如果这是错误的术语而道歉),如上所示。
评论指出我应该如何解释正则表达式,但我正在努力;为什么不呢:
Name - ( ':' )
如果NCName的意图是Name减去':',那么为什么任何一方都需要零个或多个字符(我不是问一个单独的问题,只是表明我的混乱区域) ?
请提前接受我的谢意。
答案 0 :(得分:1)
W3C发布的文档使用EBNF
Notation的变体来描述由它们标准化的语言。
"6 Notation"中的XML Recommendation部分对此进行了描述。
您发布的示例:
NCName ::= Name - (Char* ':' Char*) /* An XML Name, minus the ":" */
如何阅读:
NCName
是规则描述的对象; ::=
用描述它的表达式(在右侧)分隔所描述对象的名称(在左侧); Name
是another rule; -
是除外符号; A - B
中的EBNF
表示“匹配A
但不匹配B
”; (...)
- 括号创建一个组;他们使其中的表达表现为单个项目; Char
是文档中another rule已经描述过的另一个对象;它基本上是指Unicode字符; *
- 重复,将之前的项目与零次或多次匹配; ':'
- 单引号或双引号中的字符串是字符串文字;它代表了自己;这里是冒号; 汇总,这意味着NCName
是Name
,不包含:
。
评论似乎不正确(或者说措辞不好)。