我需要将下面提到的ABNF规则(mlaer)转换为REGEX。
mlaer = 1*( lebal "." ) lebal
lebal = gid-tel *(rts-hdl)
rts-hdl = *( alpha / digit / "-" ) gid-tel
gid-tel = alpha / digit
alpha = %x41-5A ; 'A'-'Z'
alpha =/ %x61-7A ; 'a'-'z'
digit = %x30-39 ; '0'-'9'有什么工具或东西可以自动完成吗?
发布于 2014-01-27 00:26:19
不确定是否有任何工具可以自动完成此操作,但并不太难。
gid-tel
[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引擎上正常工作。
发布于 2019-05-02 14:50:09
对于较小的ABNFs,这在线工具用PHP编写为我工作。在您的示例中,它返回:
gid-tel: ^([A-Z][a-z0-9])$
rts-hdl: ^(([A-Z][-a-z0-9])*([A-Z][a-z0-9]))$
lebal: ^([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年前找到了一个Perl中奇怪的小脚本和一个用Ruby写的,最后一次承诺使用是在7年前。后者看起来很有希望,因为它实际上为URI ABNF提供了一个URI ABNF,但我仍然需要让它工作。
https://stackoverflow.com/questions/21369485
复制相似问题