3.8. Optional Sequence:
[RULE]
Square brackets enclose an optional element sequence:
[foo bar]
is equivalent to
*1(foo bar).
RFC5234上面的部分对我来说似乎不正确。
我认为这是因为可选序列规则[foo bar]
不仅等同于1*1(foo bar)
,还等同于1*1(bar foo)
。以上示例与默认值0匹配,即0*1(foo bar)
。
然而,[]通常意味着别的东西。另一方面,我认为[foo bar]
应该代表(foo)
或(bar)
。
任何人都可以为我清除这种困惑吗?
答案 0 :(得分:1)
RFC定义了ABNF语法的语法和语义,引用的文本定义了可选序列语法的语义。根据定义,它是正确的。 ABNF中的括号形成序列组,(foo bar)
表示foo
后紧跟bar
。前面的数字语法表示重复,其中星号将最小出现次数与最大出现次数分开。最小默认值为零。所以
*1(foo bar)
与
相同0*1(foo bar)
意味着foo
后面紧跟bar
的序列至少出现零且最多一次,即序列是可选的。由于可选部分在形式语法中非常频繁,因此它们有一种特殊的简写语法,即
[foo bar]
这也意味着foo
后面紧跟bar
的序列,至少出现零次且最多一次。什么句法结构通常意味着什么并不重要,规范没有反映在世界上,它定义了自己的惯例。