看看下面的定义。这到底应该定义什么?根据EBNF规范,括号[]
定义了一个可选项目,那么为什么需要*
呢?这不是多余的吗(因为这意味着重复零次或更多次)?
第二件事是,你如何解释括号内的部分?-
是排除指示符,所以它是否意味着排除括号内的任何项目,或者排除所有三个项目的序列(从^<&
开始为零或更多,然后是]]>
,然后是从^<&
开始的零或更多)?
CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
或者我完全错了,这不是EBNF?
提前感谢
XML规范没有严格使用ISO指定的EBNF。如果您查看XML规范的第6节,它定义了所使用的表示法。方括号以类似regex的方式使用,而不是表示语法的可选元素;并且用于排除的CCD_ 7整体上排除括号内的组。因此,您引用的行表示构建如下:
[^<&]
-而非左尖括号(<
)或与号(&
)的任何字符[^<&]*
-零个或多个不是左尖括号或与号的字符[^<&]* - ([^<&]* ']]>' [^<&]*)
-零个或多个字符,这些字符不是左尖括号或符号,并且在整个序列中的任何位置都不包含特定的字符序列]]>