Возможно ли иметь регулярное выражение, которое соответствует всем допустимым регулярным выражениям? - PullRequest
6 голосов
/ 25 мая 2010

Можно ли определить, является ли данная строка допустимым регулярным выражением, используя только регулярные выражения?

Скажем, у меня есть несколько строк, которые могут быть или не быть допустимыми регулярными выражениями. Я хотел бы, чтобы регулярное выражение соответствовало той строке, которая соответствует правильному регулярному выражению. Это возможно? Или я должен использовать какую-то грамматику более высокого уровня (то есть контекстно-свободный язык), чтобы обнаружить это? Влияет ли это на использование какой-либо расширенной версии регулярных выражений, таких как Perl-регулярные выражения?

Если это возможно, что такое регулярное выражение, соответствующее регулярному выражению?

Ответы [ 3 ]

8 голосов
/ 25 мая 2010

Нет, это невозможно. Это потому, что допустимые регулярные выражения включают в себя группирование, что требует сбалансированных скобок.

Сбалансированные разделители не могут соответствовать регулярному выражению; вместо этого они должны соответствовать контекстно-свободной грамматике . (Первый пример в этой статье касается сбалансированных скобок.)

1 голос
/ 25 мая 2010

Смотрите отличную статью здесь:

Регулярное выражение для регулярных выражений?

Ответ заключается в том, что регулярные выражения НЕ пишутся с использованием обычной грамматики, а контекстно-свободной.

0 голосов
/ 28 мая 2010

Если ваш вопрос был «соответствует всем действительным регулярным выражениям», ответ (возможно, на удивление) «да». Регулярное выражение .* соответствует всем допустимым (и недействительным) регулярным выражениям, но довольно бесполезно для определения, смотрите ли вы на правильное.

Однако, поскольку вопрос «соответствует всем и только действительным регулярным выражениям», ответ таков (как DVK и Platinum Azure »сказали« нет ».

...