Групи символи в регулярни изрази на PHP

Съществуват специални команди, които позволяват избор на цели групи символи наведнъж. Командата \d означава цифра от 0 до 9. Командата \w обозначава цифра, латинска буква или знак за подчертаване. Командата \s обозначава интервал или whitespace символ: интервал, нов ред, табулация. Може да инвертирате значението на командата, като напишете главна буква: например, ако \d е цифра, то \D е не цифра.

Пример

Нека намерим всички цифри:

php<?php
  $str = '1 12 123';
  $res = preg_replace('#\d#', '!', $str);
?>

В резултат в променливата ще бъде записано следното:

php'! !! !!!'

Пример

Операторите за повторение считат командите-групи за едно цяло, тоест групиращите скоби не са необходими. В следващия пример шаблонът за търсене изглежда така: цифра от 0 до 9 един или повече пъти:

php<?php
  $str = '1 12 123 abc @@@';
  $res = preg_replace('#\d+#', '!', $str);
?>

В резултат в променливата ще бъде записано следното:

php'! ! ! abc @@@'

Пример

В следващия пример шаблонът за търсене изглежда така: всичко един или повече пъти, но не цифра от 0 до 9:

php<?php
  $str = '123abc3@@';
  $res = preg_replace('#\D+#', '!', $str);
?>

В резултат в променливата ще бъде записано следното:

php'123!3!'

Пример

В този пример шаблонът за търсене изглежда така: whitespace символ един път:

php<?php
  $str = '1 12 123 abc @@@';
  $res = preg_replace('#\s#', '!', $str);
?>

В резултат в променливата ще бъде записано следното:

php'1!12!123!abc!@@@'

Пример

В този пример шаблонът за търсене изглежда така: НЕ whitespace символ един или повече пъти. Всички поднизове, разделени с интервали, ще бъдат заменени с '!':

php<?php
  $str = '1 12 123 abc @@@';
  $res = preg_replace('#\S+#', '!', $str);
?>

В резултат в променливата ще бъде записано следното:

php'! ! ! ! !'

Пример

В този пример шаблонът за търсене изглежда така: цифра или буква един или повече пъти. Всички поднизове, състоящи се от цифри и букви, ще бъдат заменени с '!':

php<?php
  $str = '1 12 123a Abc @@@';
  $res = preg_replace('#\w+#', '!', $str);
?>

В резултат в променливата ще бъде записано следното:

php'! ! ! ! @@@'

Пример

В този пример шаблонът за търсене изглежда така: НЕ цифра и НЕ буква един или повече пъти. На това определение в нашия случай отговаря '@@@' и всички интервали (те също не са цифри или букви). Обърнете внимание на това, че в края има един '!' - в него се е преобразувал низът ' @@@' - с интервал отпред:

php$str = '1 12 123 Abc @@@';
$res = preg_replace('#\W+#', '!', $str);

В резултат в променливата ще бъде записано следното:

php'1!12!123!Abc!'

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

Задание 1

Даден е низът:

php<?php
  $str = 'a1a a2a a3a a4a a5a aba aca';
?>

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

Задание 2

Даден е низът:

php<?php
  $str = 'a1a a22a a333a a4444a a55555a aba aca';
?>

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

Задание 3

Даден е низът:

php<?php
  $str = 'aa a1a a22a a333a a4444a a55555a aba aca';
?>

Напишете регулярен израз, който ще намери низовете, в които от двете страни има букви 'a', а между тях има произволен брой цифри (включително и нула цифри, тоест низът 'aa').

Задание 4

Даден е низът:

php<?php
  $str = 'avb a1b a2b a3b a4b a5b abb acb';
?>

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

Задание 5

Даден е низът:

php<?php
  $str = 'ave a#b a2b a$b a4b a5b a-b acb';
?>

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

Задание 6

Даден е низът:

php<?php
  $str = 'ave a#a a2a a$a a4a a5a a-a aca';
?>

Напишете регулярен израз, който ще замени всички интервали с '!'.