Регулярное выражение, которое соответствует любому допустимому регулярному выражению - PullRequest
5 голосов
/ 26 июля 2010

Кто-нибудь знает, где я могу найти регулярное выражение, соответствующее любому правильному регулярному выражению в стиле C #? Это вообще возможно?

К вашему сведению, причина, по которой я пытаюсь это сделать, заключается в том, что у меня есть мини-язык, который позволяет использовать регулярные выражения в качестве части его синтаксиса, и я собрал crummy regex для проверки операторов мини-языка, но он не работает неправильно на некоторые более сложные выражения. Синтаксис мини-языка определяется через комбинацию eBNF и регулярных выражений. Я мог бы сделать эту «проверку» в C #, но я думаю, что если этот подход возможен, он будет самым чистым и лучшим разделением проблем.

Спасибо, Брайен

1 Ответ

10 голосов
/ 26 июля 2010

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

(ab(?:cd)e(fg))

уже практически невозможно проверить с помощью только регулярных выражений.Хотя некоторые разновидности регулярных выражений допускают рекурсивный спуск в совпадение (например, Perl) или сбалансированные группы захвата, которые могут эмулировать это до некоторой степени, это определенно не инструмент, предназначенный для этой работы, и вам не следуетпопробуйте вставить его в один.

То, что вы можете сделать, это просто попытаться скомпилировать выражение, которое вы хотите проверить.Механизм регулярных выражений .NET сгенерирует исключение, если шаблон неверен:

var compiledRegex = new Regex(someString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...