Синтаксис регулярных выражений

advertisement
Синтаксис регулярных выражений
Наиболее распространенными являются варианты записи регулярных выражений, основанные
на синтаксисе 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" );
Download