Regex 将ABNF规则转换为正则表达式

Regex 将ABNF规则转换为正则表达式,regex,abnf,Regex,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规则的理解,或者有

请帮助我理解此规则
([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规则的理解,或者有人可以确认或纠正我?

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

([a-z]* [A-Z]* [0-9]*)*
将是这样的(扩展正则表达式),它省略了空格:

([a-z]*[A-Z]*[0-9]*)*
两者都表示“零个或多个重复:零个或多个小写字母的序列,后跟零个或多个大写字母,后跟零个或多个数字”

由于条款的性质,您可以将其简化(在本例中,但通常需要小心)为:

您的备用ABNF规则也可以转换为相同的ERE,但这只是因为此特定情况的性质-转换不会自动生效


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

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

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规则类似于基本正则表达式,都涉及命名规则、重复、替代、顺序独立性和范围

(           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