如何通过分组解释正则表达式减法



如果有人能解释如何解释以下正则表达式,我将不胜感激;它来自 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 - BEBNF中的意思是"匹配A但不匹配B";
  • (...)- 括号创建一个组; 它们使其中的表达式表现为单个项目;
  • Char是文档中另一个规则已经描述的另一个对象;它基本上意味着一个 Unicode 字符;
  • *- 重复,匹配前一项零次或多次;
  • ':'- 单引号或双引号中的字符串是字符串文字; 它代表自身; 这里,冒号字符;

放在一起,这意味着NCName是不包含:Name

评论似乎不正确(或者可能只是措辞不好(。

最新更新