Действительно ли возможно обнаружить, если данная строка является действительным регулярным выражением, с помощью просто регулярные выражения?
Скажите, что у меня есть некоторые строки, которые могут или не могут быть действительными регулярными выражениями. Я хотел бы иметь соответствия регулярного выражения, которые они представляют в виде строки, которые соответствуют действительному регулярному выражению. Это возможно? Или у меня есть использование некоторой высокоуровневой грамматикой (т.е. бесконтекстный язык) для обнаружения этого? Это влияет, если я использую некоторую расширенную версию regexps как Perl regexps?
Если это возможно, каково соответствие regexp regexp?
Нет, это невозможно. Это связано с тем, что правильные регулярные выражения включают группировку, которая требует сбалансированных круглых скобок.
Сбалансированные разделители не могут быть сопоставлены регулярным выражением; вместо этого они должны соответствовать контекстно-свободной грамматике . (В первом примере в этой статье речь идет о сбалансированных круглых скобках.)
См. отличную статью здесь:
Регулярное выражение для регулярных выражений?
Ответ в том, что регексы пишутся НЕ с использованием регулярной грамматики, а контекстно-свободной.
Если ваш вопрос был «сопоставить все допустимые регулярные выражения», ответ будет (возможно, удивительно) «да». Регулярное выражение . *
соответствует всем допустимым (и недопустимым) регулярным выражениям, но бесполезно для определения того, смотрите ли вы на действительное.
Однако, поскольку вопрос состоит в том, чтобы «сопоставить все и только действительные регулярные выражения», ответ будет (поскольку DVK и Platinum Azure »сказали« нет ».