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

Действительно ли возможно обнаружить, если данная строка является действительным регулярным выражением, с помощью просто регулярные выражения?

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

Если это возможно, каково соответствие regexp regexp?

6
задан Juha Syrjälä 25 May 2010 в 17:19
поделиться

3 ответа

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

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

8
ответ дан 10 December 2019 в 02:43
поделиться

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

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

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

1
ответ дан 10 December 2019 в 02:43
поделиться

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

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

0
ответ дан 10 December 2019 в 02:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: