请帮我理解一下这个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规则的理解,或者有人可以确认或纠正我吗?
发布于 2013-11-27 13:49:39
Internet规范通常需要定义格式语法。增强的巴科斯-诺尔形式(ABNF)是Backus-Naur Form (通常用于描述计算中使用的语言的语法)的修改版本,并且在许多用于平衡紧凑性和简单性的规范中很流行。
BNF在标准的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-27 13:22:51
您引用的ABNF规则的直接翻译:
([a-z]* [A-Z]* [0-9]*)*可能是这样的ERE (扩展正则表达式),它省略了空格:
([a-z]*[A-Z]*[0-9]*)*两者的意思都是“零个或多个重复的小写字母:一个由零个或多个小写字母组成的序列,然后是零个或多个大写字母,最后是零个或多个数字”。
由于这些术语的性质,您可以将其简化为(在本例中,但通常需要注意):
[a-zA-Z0-9]*您的替代ABNF规则也可以转换为相同的ERE,但这只是因为此特定情况的性质-转换不会自动有效。
我假设示例输出中的双引号和逗号不是应该匹配的字符串的一部分。
https://stackoverflow.com/questions/20233894
复制相似问题