Синтаксис регулярных выражений Наиболее распространенными являются варианты записи регулярных выражений, основанные на синтаксисе PCRE (Perl Compatible Regular Expressions). Основные обозначения: . (точка) – один произвольный символ, например: a..a – произвольная цепочка из четырех символов, начинающаяся и оканчивающаяся на a; [ ] – набор символов, т.е. любой символ из заданного набора, например: [a-e0] – любая буква от a до e или цифра 0; * – повторение цепочки нуль и более раз, например: b* – последовательность из произвольного количества букв b (в том числе – нулевого, т.е. пустая цепочка); + – повторение цепочки один и более раз, например: b+ – последовательность из произвольного, не равного нулю, количества букв b; ? – опциональная цепочка (входит 0 или 1 раз), например: ab? – цепочка a или ab; {n} – повторение цепочки ровно n раз; {n,} – повторение как минимум n раз; {n,m} – вхождение от n до m раз; ( ) – группировка, например: (ab)+ – последовательность из произвольного, не равного нулю, числа повторений строки ab; | – альтернатива, например: b|a+ – буква b или последовательность букв a; \ – экранирование следующего специального символа, чтобы он воспринимался как обычный символ, например: a\.b. – цепочка из четырех символов: буквы a, точки, буквы b и произвольного символа. Поддержка в языках программирования C# В C# поддержка регулярных выражений встроена в стандартную библиотеку. Классы находятся в пространстве имен System.Text.RegularExpressions. Само регулярное выражение представляется экземпляром класса Regex и создается вызовом конструктора, в который передается строковая запись выражения. Например: Regex rx = new Regex(@"^-?\d+(\.\d{2})?$"); Класс Regexp предоставляет методы для обработки строк: IsMatch — проверка на существование подстроки, соответствующей выражению; Replace — заменить подстроки, соответствующие регулярному выражению, на некоторую строку; Split — разбить строку на подстроки, где разделители соответствуют регулярному выражению. С++ В С++ ситуация несколько сложнее — стандартного средства для использования регулярных выражений пока нет (хотя в будущий стандарт они включены). Рассмотрим использование регулярных выражений на базе библиотеки Boost::Regex — именно эта реализация и претендует на включение в стандарт. Для использования библиотеки необходимо включить заголовочный файл boost/regex.hpp и добавить библиотеку boost_regex. Для того, чтобы определить регулярное выражение, достаточно объявить переменную типа boost::regexp и передать в конструктор текст регулярного выражения. Например: boost::regexp exp("(\\d{4}[- ]){3}\\d{4}"); Для того, чтобы обрабатывать регулярные выражения, библиотека Boost предоставляет три основных функции: regex_match — проверка сопоставления выражения строке; regex_search — поиск сопоставлений выражения в строке; regex_replace — замена сопоставлений выражения в строке на заданную подстроку. В простейшем случае эти функции используются следующим образом: bool r1 = boost::regex_match( "what", exp ); bool r2 = boost::regex_search( "where", exp ); std::string r3 = boost::regex_replace( "what", exp, "to" );