Кратко о регулярных выражениях (синтаксис PREG)

Введение

Блиблиотека регулярных выражений PCRE в настоящее время широко используется практически во всех языках программирования (С/C++, Perl, PHP, Python, Object Pascal). Также доступ к ее функциям обеспечен в операционных системах (Linux) и прикладных программах (Total commander). Ее функции способны значитьельно облегчить работу со строками. Однако при первом взгляде кажется, что синтаксис сложен и запутан. Это не совсем так. Разобравшись с основными знаками пользователь (разработчик) сможет легко читать и понимать сложные запросы. И составлять свои простые и эффективные.

Классы символов

. - любой символ

\x - x символ, который требуется задать в запросе, но являющийся служебным

Пример:

\. - символ точки

\s - пробел

\S - символ

\d - цифра

\D - НЕ цифра

\w - буква

\W - НЕ буква

^ - начало строки

$ - конец строки

Классы выриантов

[] - набор символой

Пример:

[\d\S\.] - выбрать точку, цифру или печетный символ

() - группа

| - разделитель альтернатив

Пример:

(gif|jpeg) - выбрать gif или jpeg

Классы множеств

? - возможно один

+ - один и более

* - ноль и более

Пример:

-? - символ \'-\' может присутствовать опционально

Пример:

\S+ - один или несколько символов

Пример:

\d* - ноль или несколько цифр

Модификаторы

Модификаторы задают режимы обработки шаблонов

i - (case insensetive) без учета регистра

m - (multiline) чрезстрочный режим

Замена с отрицанием:
Отрицание символа
^ в наборе символов [] - т.е. [^символы]

Отрицание группы
В группе пишем ?! в группе - т.е. (?!то что должно быть исключено)

Пример:

Добавить в начало локальных ссылок авдрес сервера

preg_replace(\'/href=\s*[\\'\"]?(?!\s*[\\'\"]?http\:\/\/)(.*?)[\"\\' >]/\',\' href="http://lukianov.ru/\\1"\', $instr);

Особенности реализации в PHP

В php для работы с регулярными выражениями в основном используются следуюшие функции: preg_match, preg_match_all, preg_replace

Их подробное описание есть на сайте www.php.net.

Отмечу лишь, что шаблон должен начинаться и заканчиваться ограничителями \'/\', а модификаторы пишуться после закрывающего ограничителя.

Пример:

preg_match($text, "/ver(\d+)/i", $match); 

- взять из строковой переменной $text комбинацию ver с одной или более цифрами.
Цифры поместить в елемент 1 массива $match. Сравнивать без учета регистра.

Особенности реализации в UltraEdit

Чтобы использовать при поиске и замене в UltraEdit следует:

В настройках Advanced-Configuration-Find отметить галочку Unix Style regular expressions

При поиске (Ctrl-F) или Замене (Ctrl-R) поставить галочку Regular expressions

После этого в поле поиска можно писать выражениями

Особенность UltraEdit - для замены переменная обозначается \1, \2,...

Пример:

 Для замены текстов ver1.11 ver1.12, ... на ver. 1.11, ver. 1.12, ... 
В поле поиска ver(\d+)
В поле замены ver. (\2) или
В поле поиска (ver)(\d+)
В поле замены(\1). (\2)