Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 将ABNF规则转换为正则表达式_Regex_Abnf - Fatal编程技术网

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

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-]

我需要将下面提到的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-]*[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])?