首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ABNF规则转换为REGEX

将ABNF规则转换为REGEX
EN

Stack Overflow用户
提问于 2014-01-26 21:30:30
回答 2查看 538关注 0票数 2

我需要将下面提到的ABNF规则(mlaer)转换为REGEX。

代码语言:javascript
复制
   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'

有什么工具或东西可以自动完成吗?

EN

回答 2

Stack Overflow用户

发布于 2014-01-27 00:26:19

不确定是否有任何工具可以自动完成此操作,但并不太难。

gid-tel

代码语言:javascript
复制
[A-Za-z0-9]

rts-hdl

代码语言:javascript
复制
[A-Za-z0-9-]*[A-Za-z0-9]

lebal

代码语言:javascript
复制
[A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*

请注意,用这种形式编写的lebal将导致NFA引擎在某些类型的输入上运行很长时间。它应改写为:

代码语言:javascript
复制
[A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])?

mlaer

代码语言:javascript
复制
([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引擎上正常工作。

票数 0
EN

Stack Overflow用户

发布于 2019-05-02 14:50:09

对于较小的ABNFs,在线工具用PHP编写为我工作。在您的示例中,它返回:

代码语言:javascript
复制
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,但我仍然需要让它工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21369485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档