看看下面的定义。究竟应该定义什么?根据EBNF specification,括号[]
定义了一个可选项,那么为什么需要*
?这不是多余的(因为它意味着重复零次或多次)?
第二件事是,你如何解释括号内的部分? -
是排除指标,因此它意味着排除括号内的任何项目,或排除所有三项的序列(来自^<&
的零或更多,后跟]]>
,后跟来自^<&
)的零或更多?
CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
或者我完全弄错了,这是EBNF以外的其他内容吗?
提前致谢
答案 0 :(得分:1)
XML规范并未严格使用ISO规定的EBNF。如果查看XML规范的Section 6,它会定义使用的符号。方括号以类似正则表达式的方式使用,而不是表示语法的可选元素;用于排除的-
将括号内的组排除在整个范围内。因此,您引用的行表示如下:
[^<&]
- 任何不左尖括号(<
)或&符号(&
)[^<&]*
- 零个或多个不是左尖括号或&符号的字符[^<&]* - ([^<&]* ']]>' [^<&]*)
- 零个或多个字符不是左尖括号或&符号,并且在整个序列中的任何位置都不包含特定的字符序列]]>