如果有人能解释如何解释以下正则表达式,我将不胜感激;它来自 XML 1.0 中命名空间的 W3C 参考,并将 NCName ([4]( 定义为:
名称 - (字符* ':' 字符*(/* 一个 XML 名称,减去 ":" */
当应用于列表时,我可以理解减法,例如:
[a-z-[aeiuo]] 表示所有辅音的列表(见 http://www.regular-expressions.info/charclasssubtract.html(,但应用于组时不表示(如果这是错误的术语,请道歉(,如上所示。
评论指出了我应该如何解释正则表达式,但我正在挣扎;为什么不只是:
Name - ( ':' )
如果意图是让 NCName 是名称减去 ':",那么为什么两边都需要零个或多个字符(我不是在问一个单独的问题,只是指出我的困惑区域(?
请提前接受我的感谢。
W3C 发布的文档使用EBNF
表示法的变体来描述由它们标准化的语言。
XML 建议的"6 表示法"部分对此进行了描述。
您发布的示例:
NCName ::= Name - (Char* ':' Char*) /* An XML Name, minus the ":" */
如何阅读:
NCName
是规则描述的对象;::=
将描述对象的名称(左侧(与描述对象的表达式(右侧(分隔
;Name
是已由另一个规则描述的对象;-
是 except 符号;A - B
在EBNF
中的意思是"匹配A
但不匹配B
";(...)
- 括号创建一个组; 它们使其中的表达式表现为单个项目;Char
是文档中另一个规则已经描述的另一个对象;它基本上意味着一个 Unicode 字符;*
- 重复,匹配前一项零次或多次;':'
- 单引号或双引号中的字符串是字符串文字; 它代表自身; 这里,冒号字符;
放在一起,这意味着NCName
是不包含:
的Name
。
评论似乎不正确(或者可能只是措辞不好(。