- •Лекция 4 Манипулирование строками и регулярные выражения
- •Форматирование строк
- •Усечение строк
- •Форматирование строк для представления Использование html- форматирования
- •Форматирование строк для печати
- •Форматирование строк для хранения
- •Объединение и разделение строк с помощью строковых функций
- •Сравнение строк
- •Упорядочение строк
- •Проверка длины строк
- •Сопоставление и замена подстрок с помощью строковых функций
- •Поиск строк в строках
- •Определение позиции подстроки
- •Замена подстрок
- •Регулярные выражения
- •Наборы символов и классы
- •Повторение
- •Подвыражения
- •Ветвление
- •Поиск подстрок с помощью регулярных выражений
- •Замена подстрок с помощью регулярных выражений
- •Разделение строк с помощью регулярных выражений
Замена подстрок
Строковая функция, которую чаще всего используют для замены – str_replace(). Ее прототип:
string str_replace(string needle, string new_needle, string haystack);
Регулярные выражения
До сих пор действия по сопоставлению шаблонов выполнялось с использованием строковых функций. Эти действия ограничивались случаями точного соответствия строк или подстрок. В PHP сопоставление с помощью регулярных выражений больше подобно сопоставлению с помощью функции strstr(), чем сравнению на предмет равенства, поскольку выполняется сопоставление строки, находящейся где-то внутри другой строки. Например, строка “shop” соответствует регулярному выражению “shop”, “ho”, “h” и т.д. В дополнение к точному соответствию символов можно использовать специальные символы для указания метазначений. Например, с помощью специальных символов можно указать, что шаблон должен встречаться в начале или конце строки, что часть шаблона может повторяться или символы в шаблоне должны иметь конкретный тип. Рассмотрим все перечисленные случаи.
Наборы символов и классы
Использование наборов символов расширяет спектр возможностей регулярных выражений по сравнению с выражениями точного сопоставления. Фактически они являются одним из видов группового символа. Например, символ “.” можно использовать в качестве группового символа для любого другого одиночного символа, за исключением символа новой строки (регулярное выражение .at соответствует строкам “cat”, “mat” “#at” и т.д.).
Используя регулярные выражения можно точнее указывать тип символов, которые нужно сопоставлять, и можно указывать набор, к которому должен принадлежать символ. Например, если необходимо ограничить символы от a до z, можно указать [a-z].
Все, заключенное в специальные символы квадратных скобок, представляет класс символов, т.е. набор символов, к которому должен принадлежать сопоставляемый символ. Причем, заключенное в квадратные скобки выражение сопоставляется только с одиночным символом. Примеры: [aeiou] – означает любую гласную английского алфавита; [^a-z] – соответствует любому символу не относящемуся к диапазону a-z. В дополнение к наборам перечисления и диапазонам может использоваться ряд предопределенных классов символов.
Класс |
Соответствие |
[[:alnum:]] |
Алфавитно – цифровые символы |
[[:alpha:]] |
Алфавитные символы |
[[:lower:]] |
Строчные буквы |
[[:upper:]] |
Прописные буквы |
[[:digit:]] |
Десятичные цифры |
[[xdigit:]] |
Шестнадцатеричные цифры |
[[:punct:]] |
Знаки пунктуации |
[[:blanc:]] |
Символы табуляции и пробелов |
[[:space:]] |
Любые символы свободного места |
[[:cntrl:]] |
Управляющие символы |
[[:print:]] |
Все печатные символы |
[[:graph:]] |
Все печатные символы, за исключением символов пробелов |
Повторение
Часто требуется указать возможность наличия нескольких вхождений конкретной строки или класса символов. В регулярном выражении это можно сделать с помощью двух специальных символов. Символ * означает, что шаблон может повторяться нуль и более раз, а символ + - 1 и более раз. Например, [[:alnum:]]+ - означает “по крайней мере один алфавитно – цифровой символ”.