Класс QRegExp

   
На этом шаге рассмотрим класс QRegExp.

   
Для работы с регулярными выражениями Qt предоставляет класс QRegExp. Регулярные выражения — это мощное средство анализа и обработки строк. Они содержат в себе шаблон, предназначенный для поиска в строке. Это позволяет быстро и гибко извлекать совпавший с шаблоном текст. Но следует заметить, что работа с регулярными выражениями производится медленнее методов, определенных в классе QString, и поэтому их применение должно быть обоснованным. Таблица 1 содержит основные шаблонные символы, поддерживаемые классом QRegExp.

Таблица 1. Шаблоны регулярных выражений

СимволОписаниеПример
.Любой символa.b
$Должен быть конец строкиAbc$
[ ]Любой символ из заданного набора[abc]
-Определяет диапазон символов в группе [ ][0-9A-Za-z]
^В начале набора символов означает любой символ, не вошедший в набор[^def]
*Символ должен встретиться в строке ни разу или несколько разA*b
+Символ должен встретиться в строке минимум 1 разA+b
?Символ должен встретиться в строке 1 раз или не встретиться вообщеA?b
{n}Символ должен встретиться в строке указанное число разA{3}b
{n,}Допускается минимум n совпаденийa{3,}b
{,n}Допускается до n совпаденийa{,3}b
{n,m}Допускается от n до m совпаденийa{2,3}b
|Ищет один из двух символовac|bc
\bВ этом месте присутствует граница словаa\b
\BГраницы слова нет в этом местеa\Bd
( )Ищет и сохраняет в памяти группу найденных символов(ab|ac)ad
\dЛюбое число 
\DВсе, кроме числа 
\sЛюбой тип пробелов 
\SВсе, кроме пробелов 
\wЛюбая буква, цифра или знак подчеркивания 
\WВсе, кроме букв 
\AНачало строки 
\bЦелое слово 
\BНе слово 
\ZКонец строки (совпадает с символом конца строки или перед символом перевода каретки) 
\zКонец строки (совпадает только с концом строки) 

   
Для того чтобы найти один из нескольких символов, нужно поместить их в квадратные скобки. Например [ab] будет совпадать с a или b. Чтобы не писать все символы подряд, можно указать диапазон, например [A-Z] совпадает с любой буквой в верхнем регистре, [a-z] — с любой буквой в нижнем регистре, а [0-9] — с любой цифрой. Можно совмещать такие записи, например, [a-z7] будет совпадать с любой буквой в нижнем регистре и с цифрой 7.

   
Также можно исключать символы, поставив перед ними знак ^. Например [^0-9] будет соответствовать всем символам, кроме цифр.

   
Указанные в табл. 1 величины в фигурных скобках называются пределами. Пределы позволяют точно задать количество раз, которое символ должен повторяться в тексте. Например, a{4,5} будет совпадать с текстом, если буква a встретится в нем не менее 4, но не более 5 раз подряд. Например, в следующем отрывке задано регулярное выражение для ip-адреса, им можно воспользоваться, например, для того, чтобы проверить строку на содержание в ней ip-адреса:

QRegExp reg("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}");
QString str("это строка содержит ip-адрес 123.222.63.1");
qDebug() << (str.contains(reg) > 0); //true

   
Обратите внимание, что для указания символа точки в регулярном выражении перед ним стоит обратная косая черта (\), а в соответствии с правилами языка С++ для ее задания в строке она должна удваиваться. Если бы косой черты не было, то точка имела бы в соответствии с табл. 1 значение "любой символ", и регулярное выражение распознавало бы, например, строку "1z2y3x4", как ip-адрес, что, разумеется, не правильно.

   
Шаблоны можно комбинировать при помощи символа |, задавая ветвления в регулярном выражении. Регулярное выражение с двумя ветвями совпадает с подстрокой, если совпадает одна из ветвей. Например:

QRegExp rxp("(.com|.ru)");
int n1 = rxp.indexIn("www.bhv.ru"); // n1 = 7 (совпадение на 7-й позиции)
int n2 = rxp.indexIn("www.bhv.de"); // n2 = -1 (совпадений не найдено)

   
Указанные в табл. 1 символы с обратной косой чертой (обратным слэшем) позволяют значительно упростить регулярные выражения. Например, регулярное выражение [a-zA-Z0-9_] идентично выражению \w.

   
На следующем шаге рассмотрим класс QString.

Предыдущий шаг
Содержание
Следующий шаг



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий