среда, 23 мая 2012 г.

QRegExp для работы с текстовыми данными. часть 1

По сути QRegExp переводится как Regular Expression, или по-русски - регулярное выражение. Суть данного выражения в том, что мы можем задав определенные правила, найти необходимую строку с некоторым содержанием, например, там необходимо извлечь номер телефона, который заключен в тэги <phone> и </phone>. Можно сделать задачу в лоб, и извлечь номер через find, но это слишком уж топорно.
Под катом чуть более подробное описание возможностей класса QRegExp.




Класс QRegExp использует регулярные выражения может как находить, так и делать замену некоторого текста по заданному условию. Для этого он использует выражения, квантификаторы и утверждения. За основу языка взят порядок построения регулярных выражений языка Perl.

Один из примеров выражения - поиск символа, равного x или 5. Другой пример выражения  - заключение в квадратные скобки. [ABCD] - означает A или B или C или D. Тоже выражение мы можем записать [A-D].

Квантификаторы определяют количество вхождений данного символа. Например x{1,1} означает только одно вхождение символа x. x{1, 5} - означает от одного до 5 x подряд.

В качестве примера - нам необходимо найти числа от 0 до 99. Тогда регулярное выражение будет выглядеть как [0-9]{1,2}. При таком выражении мы найдём все возможные числа от 0 до 99. В случае, когда мы хотим найти строки, которые состоят лишь из одного числа от 0 до 99, то регулярное выражение будет ^[0-9]{1,2}$. Знак ^ в начале выражения означает что регулярное выражение должно начинаться с начала строки, а знак $ в конце выражения - регулярное выражение должно заканчиваться в конце строки.

Если мы ищем по квантификатору {1,1} то его указывать не обязательно, т. е. x{1,1} можно просто указать как x. Вместо квантификатора {0, 1} используют ? . Т. Е. для числа мы можем теперь переписать выражение следующим образом: ^[0-9][0-9]?$

Для поиска цифры (выражение [0-9] ) можно использовать символ \d. В итоге значения от 0 до 99 получаем через выражение ^\d\d?$ .

1 комментарий:

  1. Здравствуйте, Сергей. У Вас отличный сайт (регулярно на него попадаю из гугла), но с этой статьей что-то не так.

    >> Под катом чуть более подробное описание возможностей класса QRegExp

    Нет ката в этой статье. Нет никаких примеров ((

    ОтветитьУдалить