Фигурные скобки
В предыдущей части статьи "Регулярные выражения в PHP (preg_replace)" мы упоминали об операторах * , + , ?. Иногда этих операторов недостаточно. К примеру, представьте, что нужно составить регулярное выражение, в котором будет повторяющийся символ с частотой от 5 до 10 повторений. А все операторы работают минимум от одного и до бесконечности, без верхнего предела. Тогда в дело вступают фигурные скобки { }. Если поставить такие скобки после повторяемого символа, то внутри можно написать до двух чисел через запятую. Рассмотрим все три возможные комбинации комбинации:- {7} - символ повторяется ровно 7 раз
- {5,7} - символ повторяется от 5 до 7 раз
- {4,} - символ повторяется более 4 раз
<?php
echo preg_replace('#ы{3}#u', '!', 'Мыыышь'); // результат: М!шь
echo preg_replace('#ы{2}#u', '!', 'Мыыышь'); // результат: М!ышь
echo preg_replace('#ы{2,4}#u', '!', 'Мыыышь'); // результат: М!шь
echo preg_replace('#ы{0,4}#u', '!', 'Мыыышь'); // результат: М!шь
echo preg_replace('#ы{4,7}#u', '!', 'Мыыышь'); // результат: Мыыышь
echo preg_replace('#ы{2}#u', '!', 'Мыыышь'); // результат: М!ышь
echo preg_replace('#ы{4}#u', '!', 'Мыыышь'); // результат: Мыыышь
?>
Можно подставлять в том числе ноль: {0,2}
Группы символов
Есть команды, которые можно использовать в регулярных выражениях, и они указывают на целые группы символов. К примеру:- \s - все символы пробела, включая переносы строк, табуляции и неразрывные пробелы
- \S - все символы, кроме пробела
- \w - все цифры или буквы
- \W - все символы, кроме цифр и букв
- \d - все цифры
- \D - все не цефры
<?php
echo preg_replace('#\s#u', '!', 'Тише, мыши, 2 кота на крыше');
// результат: "Тише,!мыши,!2!кота!на!крыше"
echo preg_replace('#\S#u', '!', 'Тише, мыши, 2 кота на крыше');
// результат: "!!!!! !!!!! ! !!!! !! !!!!!"
echo preg_replace('#\w#u', '!', 'Тише, мыши, 2 кота на крыше');
// результат: "!!!!, !!!!, ! !!!! !! !!!!!"
echo preg_replace('#\W#u', '!', 'Тише, мыши, 2 кота на крыше');
// результат: "Тише!!мыши!!2!кота!на!крыше"
echo preg_replace('#\d#u', '!', 'Тише, мыши, 2 кота на крыше');
// результат: "Тише, мыши, ! кота на крыше"
echo preg_replace('#\D#u', '!', 'Тише, мыши, 2 кота на крыше');
// результат: "!!!!!!!!!!!!2!!!!!!!!!!!!!!"
?>
Как и в прошлой статье, напомним, что регулярными выражениями необходимо использовать только в том случае, если нет никакого другого способа решения.
Ошибки в регулярных выражениях - это очень частое явление. Поэтому прибегайте к этому инструменту только в самых-самых безвыходных случаях.
Ошибки в регулярных выражениях - это очень частое явление. Поэтому прибегайте к этому инструменту только в самых-самых безвыходных случаях.
Начало и конец строки
Бывают случаи, когда в регулярном выражении необходимо явно указать начало или конец строки. Начало строки можно указать с помощью символа возведения в степень ^, а конец строки значком $. Попробуем сделать это на практике:<?php
echo preg_replace('#..ше#u', '!', 'Тише, мыши, кот на крыше');
// результат: "!, мыши, кот на к!"
echo preg_replace('#^..ше#u', '!', 'Тише, мыши, кот на крыше');
// результат: "!, мыши, кот на крыше"
echo preg_replace('#ше#u', '!', 'Тише, мыши, кот на крыше');
// результат: "Ти!, мыши, кот на кры!"
echo preg_replace('#ше$#u', '!', 'Тише, мыши, кот на крыше');
// результат: "Тише, мыши, кот на кры!"
?>
Начало и конец слова
Существуют две команды, которые позволяют сделать регулярные выражения, завязанные на словах:- \b - означает начало или конец слова
- \B - отзначает не начало и не конец слова
<?php
echo preg_replace('#\b[а-я]+\b#iu', '!', 'Тише, мыши, кот на крыше');
// результат: "!, !, ! ! !"
?>
Количество замен в preg_replace
У функции preg_replace есть четвёртый параметр. С помощью него можно задать ограничение на количество замен.<?php
echo preg_replace('#ш#u', '!', 'Тише, мыши, кот на крыше', 2);
// результат: "Ти!е, мы!и, кот на крыше"
?>
- в примере четвёртым параметром стоит число 2, поэтому были сделаны только две замены.