2015-09-03 3 views
7

Я читаю код анализатора регулярных выражений и начинаю задаваться вопросом, является ли синтаксис регулярного выражения само по себе регулярным и может быть выражен другим (довольно сложным) регулярным выражением?Можно ли анализировать регулярное выражение с регулярным выражением?

rere = "" # the regular expression of regular language 
match1 = re.match(rere, "[a-z][email protected][a-z]+.com") # True 
match2 = re.match(rere, ")az[") # False 

Я не вижу никакой рекурсивной структуры в синтаксисе регулярных выражений, поэтому я думаю, что, возможно, это выполнимо?

Если это так, каково выражение? Если нет, то почему?

+3

Нет. Вам нужна контекстно-свободная грамматика для разбора регулярного выражения. Вложенные круглые скобки не могут быть проанализированы (теоретическим) регулярным выражением. – nhahtdh

+0

Да, вложенные круглые скобки. Я забыл об этом. Но если я не поддерживаю группу внутри группы, будет ли ответ другим? – NeoWang

+1

@NeoWang: Тогда то, что у вас есть, слабее обычного выражения. то есть существуют языки, где может быть описано регулярное выражение/регулярная грамматика, но не ваша грамматика. – nhahtdh

ответ

3

Вы не можете разобрать вложенные круглые скобки с регулярным выражением, потому что для этого вам понадобится бесконечное состояние. Так что ответ - нет. То, что вы ищете, называется context-free grammars.