2

请帮助我理解这条ABNF规则([a-z]* [A-Z]* [0-9]*)*
我认为它可以像这样转换为正则表达式[a-zA-Z0-9]*。所以 ABNF 规则应该匹配任何顺序的小写和/或大写字母和/或数字及其组合。例如,以下字符串应与规则匹配。

"ABC", "abc", "abc12", "aAbC876", "123go", etc.

如果 ABNF 规则是([a-z]* [A-Z]* | [0-9]*)*,它也可以转换为相同的正则表达式。

验证正则表达式很容易,但是是否有工具或东西可以验证我对这些 ABNF 规则的理解,或者任何人都可以确认或更正我吗?

4

2 回答 2

2

Internet 规范通常需要定义格式语法。增强巴科斯-瑙尔形式( ABNF ) 是Backus-Naur Form通常用于描述计算中使用的语言的语法)的修改版本,并且在许多这些规范中很流行,以平衡紧凑性和简单性。

ABNF在标准BNF中具有一定的核心规则。

你的规则:

([a-z]* [A-Z]* [0-9]*)*

解释为ABNF规则:

(  )        Elements enclosed in parentheses are treated as a 
            single element whose contents are strictly ordered.  
[  ]        Square brackets enclose an optional element sequence
a-z A-Z     Core rule for a ALPHA character
0-9         Core rule for a DIGIT character
*           Repeat (Repetition rule)

你的规则翻译成扩展的正则表达式几乎是一样的。

([a-z]*[A-Z]*[0-9]*)*

解释:

(           group and capture to \1 (0 or more times)
 [a-z]*     any character of: 'a' to 'z' (0 or more times)
 [A-Z]*     any character of: 'A' to 'Z' (0 or more times)
 [0-9]*     any character of: '0' to '9' (0 or more times)
)*          end of \1 

ABNF 规则类似于基本的正则表达式,都涉及命名规则、重复、替代、顺序无关和范围。

于 2013-11-27T05:49:39.050 回答
1

您引用的 ABNF 规则的直接翻译:

([a-z]* [A-Z]* [0-9]*)*

将是这样的ERE(扩展正则表达式),它省略了空格:

([a-z]*[A-Z]*[0-9]*)*

两者都表示“零个或多个重复:零个或多个小写字母,后跟零个或多个大写字母,后跟零个或多个数字的序列”。

由于术语的性质,您可以将其简化(在这种情况下,但通常需要注意):

[a-zA-Z0-9]*

您的替代 ABNF 规则也可以转换为相同的 ERE,但这只是因为这种特定情况的性质 - 转换不会自动有效。

我假设您的示例输出中的双引号和逗号不是应该匹配的字符串的一部分。

于 2013-11-27T05:22:50.587 回答