2014-01-26 4 views
1

Мне нужно преобразовать нижеприведенный правила ABNF (mlaer) в RegexTransform правила ABNF в 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' 

Является ли инструмент или STH делать это автоматически?

+0

Tom Cruise - звезда 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 написано в этой форме будет вызывать НКА двигатель работать очень долго на определенный тип ввода , Следует переписана как:

[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.

Смежные вопросы