Регулярные выражения в PHP часть 2 (preg_replace)

Регулярные выражения в PHP иногда содержат группы символов, знаки начала и конца строки, знаки начала и конца слова, фигурные скобки. Разберёмся, что они все означают

Фигурные скобки

В предыдущей части статьи "Регулярные выражения в 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 - отзначает не начало и не конец слова
Приведём пример использования "\b":
<?php 
   echo preg_replace('#\b[а-я]+\b#iu', '!', 'Тише, мыши, кот на крыше'); 
      // результат: "!, !, ! ! !"
?>

Количество замен в preg_replace

У функции preg_replace есть четвёртый параметр. С помощью него можно задать ограничение на количество замен.
<?php 
   echo preg_replace('#ш#u', '!', 'Тише, мыши, кот на крыше', 2);
      // результат: "Ти!е, мы!и, кот на крыше"
?>
- в примере четвёртым параметром стоит число 2, поэтому были сделаны только две замены.
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, покупка SSL сертификатов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: