Regex 将ABNF规则转换为正则表达式
我需要将下面提到的ABNF规则(mlaer)转换为正则表达式Regex 将ABNF规则转换为正则表达式,regex,abnf,Regex,Abnf,我需要将下面提到的ABNF规则(mlaer)转换为正则表达式 有没有什么工具或某物可以自动执行此操作?不确定是否有任何工具可以自动执行此操作,但这并不太难 gid电话 [A-Za-z0-9] rts hdl [A-Za-z0-9-]*[A-Za-z0-9] lebal [A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])* 请注意,以这种形式编写的lebal将导致NFA引擎在特定类型的输入上运行很长时间。应将其改写为: [A-Za-z0-9]([A-Za-z0-9-]
有没有什么工具或某物可以自动执行此操作?不确定是否有任何工具可以自动执行此操作,但这并不太难
gid电话
[A-Za-z0-9]
rts hdl
[A-Za-z0-9-]*[A-Za-z0-9]
lebal
[A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*
请注意,以这种形式编写的lebal
将导致NFA引擎在特定类型的输入上运行很长时间。应将其改写为:
[A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])?
mlaer
([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])?\.)+[A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])?
您可以使用字符串连接来构造复杂的正则表达式。这将允许您编写干净的代码。尽管lebal的案例需要对语法进行修改,以便在NFA引擎上运行良好。对于较小的ABNFs,在线工具适合我。在您的情况下,它返回:
gid电话:^([A-Z][A-z0-9])$
rts hdl:^([A-Z][A-z0-9])*([A-Z][A-z0-9]))$
勒巴尔:^([A-Z][A-z0-9])(([A-Z][A-z0-9])*([A-Z][A-z0-9]))*$
mlaer:([A-Z][A-z0-9])(([A-Z][A-z0-9])*([A-Z][A-z0-9]))*\)+([A-Z][A-z0-9])(([A-Z][A-z0-9])*([A-Z][A-z0 9]))*$
但对于较大的ABNF(如电子邮件地址),它只输出空白。因此,我目前正在寻找其他工具,发现了一个和一个几乎17年前,最后承诺7年前。后者看起来很有希望,因为它实际上给了我一个正则表达式,但我仍然需要让它工作。汤姆·克鲁斯——Top Gun的明星——这是一种荣誉。您使用的是什么语言?@Kobi、Java和Python.;-)
([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])?\.)+[A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])?