请帮助我理解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规则的理解,还是有人可以确认或纠正我吗?
答案 0 :(得分:2)
Internet规范通常需要定义格式语法。 增强的Backus-Naur表单( 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规则与基本正则表达式类似,都涉及命名规则,重复,备选方案,顺序独立性和范围。
答案 1 :(得分:1)
您引用的ABNF规则的直接翻译:
([a-z]* [A-Z]* [0-9]*)*
将是这样的ERE(扩展正则表达式),它省略了空格:
([a-z]*[A-Z]*[0-9]*)*
两者都表示零次或多次重复:零个或多个小写字母的序列,后跟零个或多个大写字母,后跟零个或多个数字'。
由于条款的性质,您可以简化(在这种情况下,但通常需要小心):
[a-zA-Z0-9]*
您的替代ABNF规则也可以转换为相同的ERE,但这仅仅是因为此特定情况的性质 - 翻译不会自动生效。
我假设示例输出中的双引号和逗号不是应该匹配的字符串的一部分。