Наборы символов в регулярных выражениях PHP

Группы символов \d и \w не очень гибкие. Даже такая простая задача, как найти все буквы, но не цифры - не может быть решена ими. Для таких задач следует использовать квадратные скобки, представляющие собой операцию ИЛИ.

Квадратные скобки заменяют собой один символ, любой из перечисленных внутри. К примеру, вот так: #x[abc]x# - мы говорим, что по краям должны стоять буквы икс, а внутри - один символ: или 'a', или 'b', или 'c'.

После квадратных скобок можно писать операторы повторения. К примеру, вот так: #x[abc]+x# - мы говорим, что внутри иксов может быть любое количество символов 'a', 'b' и 'c' - в любых комбинациях.

Можно не только перечислять символы, но создавать группы символов, записывая между двумя символами дефис. К примеру, вот так: #[a-d]# - мы получаем все символы от 'a' до 'd'.

Давайте посмотрим на примерах.

Пример

В данном примере шаблон поиска выглядит так: между иксами любая буква от 'a' до 'z':

php<?php
  $str = 'xax xbx xcx x@x';
  $res = preg_replace('#x[a-z]x#', '!', $str);
?>

В результате в переменную запишется следующее:

php'! ! ! x@x'

Пример

В данном примере шаблон поиска выглядит так: между иксами любая буква от 'a' до 'k':

php<?php
  $str = 'xax xbx xmx x@x';
  $res = preg_replace('#x[a-k]x#', '!', $str);
?>

В результате в переменную запишется следующее:

php'! ! xmx x@x'

Пример

В данном примере шаблон поиска выглядит так: между иксами любая буква от 'A' до 'Z':

php<?php
  $str = 'xax xBx xcx x@x';
  $res = preg_replace('#x[A-Z]x#', '!', $str);
?>

В результате в переменную запишется следующее:

php'xax ! xcx x@x'

Пример

В данном примере шаблон поиска выглядит так: между иксами любая цифра от 0 до 9:

php<?php
  $str = 'xax x1x x3x x5x x@x';
  $res = preg_replace('#x[0-9]x#', '!', $str);
?>

В результате в переменную запишется следующее:

php'xax ! ! ! x@x'

Пример

В данном примере шаблон поиска выглядит так: между иксами любая цифра от 3 до 7:

php<?php
  $str = 'xax x1x x3x x5x x@x';
  $res = preg_replace('#x[3-7]x#', '!', $str);
?>

В результате в переменную запишется следующее:

php'xax x1x ! ! x@x'

Пример

В данном примере шаблон поиска выглядит так: между иксами любая буква от 'a' до 'z' или цифра от 1 до 9:

php<?php
  $str = 'xax x1x x3x x5x x@x';
  $res = preg_replace('#x[a-z1-9]x#', '!', $str);
?>

В результате в переменную запишется следующее:

php'! ! ! ! x@x'

Пример

В данном примере шаблон поиска выглядит так: между иксами любая буква от 'a' до 'z' или буква от 'A' до 'Z':

php<?php
  $str = 'xax xBx xcx x5x x@x';
  $res = preg_replace('#x[a-zA-Z]x#', '!', $str);
?>

В результате в переменную запишется следующее:

php'! ! ! x5x x@x'

Пример

В данном примере шаблон поиска выглядит так: между иксами любая буква от 'a' до 'z' или цифры 1, 2:

php<?php
  $str = 'xax xbx x1x x2x x3x';
  $res = preg_replace('#x[a-z12]x#', '!', $str);
?>

В результате в переменную запишется следующее:

php'! ! ! ! x3x'

Пример

В данном примере шаблон поиска выглядит так: между иксами буквы от 'a' до 'z' в количестве от 1 и более:

php<?php
  $str = 'xx xabesx xaadx x123x xa3x';
  $res = preg_replace('#x[a-z]+x#', '!', $str);
?>

В результате в переменную запишется следующее:

php'xx ! ! ! x123x xa3x'

Пример

Сделаем так, чтобы количество букв могло быть и ноль:

php<?php
  $str = 'xx xabesx xaadx x123x xa3x';
  $res = preg_replace('#x[a-z]*x#', '!', $str);
?>

В результате в переменную запишется следующее:

php'! ! ! x123x xa3x'

Практические задачи

Задание 1

Дана строка:

php<?php
  $str = 'aba aea aca aza axa';
?>

Напишите регулярку, которая найдет по следующему шаблону: по краям стоят буквы 'a', а между ними - буква 'b', 'e' или 'x'.

Задание 2

Дана строка:

php<?php
  $str = 'a1a a3a a7a a9a aba';
?>

Напишите регулярку, которая найдет по следующему шаблону: по краям стоят буквы 'a', а между ними - цифра от 3-х до 6-ти.

Задание 3

Дана строка:

php<?php
  $str = 'aba aea afa aha aga';
?>

Напишите регулярку, которая найдет по следующему шаблону: по краям стоят буквы 'a', а между ними - буква от a до g.

Задание 4

Дана строка:

php<?php
  $str = 'aba aea afa aha aga';
?>

Напишите регулярку, которая найдет по следующему шаблону: по краям стоят буквы 'a', а между ними - буква от a до f и от j до z.

Задание 5

Дана строка:

php<?php
  $str = 'aAa aea aEa aJa a3a';
?>

Напишите регулярку, которая найдет по следующему шаблону: по краям стоят буквы 'a', а между ними - буква от a до f и от A до D.

Задание 6

Дана строка:

php<?php
  $str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>

Напишите регулярку, которая найдет по следующему шаблону: по краям стоят буквы 'a', а между ними - маленькие латинские буквы, не затронув остальных.

Задание 7

Дана строка:

php<?php
  $str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>

Напишите регулярку, которая найдет по следующему шаблону: по краям стоят буквы 'a', а между ними - маленькие и большие латинские буквы, не затронув остальных.

Задание 8

Дана строка:

php<?php
  $str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>

Напишите регулярку, которая найдет по следующему шаблону: по краям стоят буквы 'a', а между ними - маленькие латинские буквы и цифры, не затронув остальных.