2014-01-26 87 views
1

我需要改变下述ABNF规则(mlaer),以正则表达式变换ABNF规则,正则表达式

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' 

是任何工具或某物自动做呢?

+0

汤姆克鲁斯 - Top Gun的明星 - 这是一种荣耀。你在用什么语言? – Kobi

+0

@Kobi,Java和Python。 ;-) –

回答

0

不确定是否有任何工具可以自动执行此操作,但不会太难。

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引擎上运行良好。