如何用分组来解释正则表达式减法

时间:2017-07-29 07:51:41

标签: regex xml namespaces

如果有人可以解释如何解释以下正则表达式,我将不胜感激;它来自Namespaces in XML 1.0的W3C参考,并将NCName([4])定义为:

名称 - (字符*':'字符*)/ * XML名称,减去“:”* /

我可以理解应用于列表时的减法,例如:

[a-z- [aeiuo]]表示所有辅音的列表(请参阅http://www.regular-expressions.info/charclasssubtract.html),但在应用于组时则不会(如果这是错误的术语而道歉),如上所示。

评论指出我应该如何解释正则表达式,但我正在努力;为什么不呢:

           Name - ( ':' ) 

如果NCName的意图是Name减去':',那么为什么任何一方都需要零个或多个字符(我不是问一个单独的问题,只是表明我的混乱区域) ?

请提前接受我的谢意。

1 个答案:

答案 0 :(得分:1)

W3C发布的文档使用EBNF Notation的变体来描述由它们标准化的语言。
"6 Notation"中的XML Recommendation部分对此进行了描述。

您发布的示例:

NCName ::= Name - (Char* ':' Char*)  /* An XML Name, minus the ":" */

如何阅读:

  • NCName是规则描述的对象;
  • ::=用描述它的表达式(在右侧)分隔所描述对象的名称(在左侧);
  • Nameanother rule;
  • 已经描述过的对象
  • -是除外符号; A - B中的EBNF表示“匹配A但不匹配B”;
  • (...) - 括号创建一个组;他们使其中的表达表现为单个项目;
  • Char是文档中another rule已经描述过的另一个对象;它基本上是指Unicode字符;
  • * - 重复,将之前的项目与零次或多次匹配;
  • ':' - 单引号或双引号中的字符串是字符串文字;它代表了自己;这里是冒号;

汇总,这意味着NCNameName,不包含:

评论似乎不正确(或者说措辞不好)。