Регулярные выражения в 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, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: