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