Grupy znaków w wyrażeniach regularnych PHP

Istnieją specjalne komendy, które pozwalają wybrać od razu całe grupy znaków. Komenda \d oznacza cyfrę od 0 do 9. Komenda \w oznacza cyfrę, łacińską literę lub znak podkreślenia. Komenda \s oznacza spację lub znak spacji: spację, znak nowej linii, tabulację. Można odwrócić znaczenie komendy, pisząc wielką literę: na przykład, jeśli \d - cyfra, to \D - nie cyfra.

Przykład

Znajdźmy wszystkie cyfry:

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

W wyniku do zmiennej zostanie zapisane następujące:

php'! !! !!!'

Przykład

Operatory powtórzenia traktują komendy-grupy jako całość, to znaczy nawiasy grupujące nie są potrzebne. W następnym przykładzie wzorzec wyszukiwania wygląda tak: cyfra od 0 do 9 jeden lub więcej razy:

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

W wyniku do zmiennej zostanie zapisane następujące:

php'! ! ! abc @@@'

Przykład

W następnym przykładzie wzorzec wyszukiwania wygląda tak: cokolwiek jeden lub więcej razy, ale nie cyfra od 0 do 9:

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

W wyniku do zmiennej zostanie zapisane następujące:

php'123!3!'

Przykład

W tym przykładzie wzorzec wyszukiwania wygląda tak: znak spacji jeden raz:

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

W wyniku do zmiennej zostanie zapisane następujące:

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

Przykład

W tym przykładzie wzorzec wyszukiwania wygląda tak: NIE znak spacji jeden lub więcej razy. Wszystkie podciągi, oddzielone spacjami, zostaną zastąpione na '!':

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

W wyniku do zmiennej zostanie zapisane następujące:

php'! ! ! ! !'

Przykład

W tym przykładzie wzorzec wyszukiwania wygląda tak: cyfra lub litera jeden lub więcej razy. Wszystkie podciągi, składające się z cyfr i liter, zostaną zastąpione na '!':

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

W wyniku do zmiennej zostanie zapisane następujące:

php'! ! ! ! @@@'

Przykład

W tym przykładzie wzorzec wyszukiwania wygląda tak: NIE cyfra i NIE litera jeden lub więcej razy. W rozpatrywanym przypadku do tej definicji kwalifikuje się '@@@' i wszystkie spacje (one przecież też nie są cyframi ani literami). Zwróć uwagę na to, że na końcu jedna '!' - w nią przekształcił się ciąg ' @@@' - ze spacją na początku:

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

W wyniku do zmiennej zostanie zapisane następujące:

php'1!12!123!Abc!'

Zadania praktyczne

Задание 1

Dany jest ciąg:

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

Napisz wyrażenie regularne, które znajdzie ciągi, w których po brzegach stoją litery 'a', a między nimi jedna cyfra.

Задание 2

Dany jest ciąg:

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

Napisz wyrażenie regularne, które znajdzie ciągi, w których po brzegach stoją litery 'a', a między nimi dowolna liczba cyfr.

Задание 3

Dany jest ciąg:

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

Napisz wyrażenie regularne, które znajdzie ciągi, w których po brzegach stoją litery 'a', a między nimi dowolna liczba cyfr (w tym również zero cyfr, to znaczy ciąg 'aa').

Задание 4

Dany jest ciąg:

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

Napisz wyrażenie regularne, które znajdzie ciągi następującego rodzaju: po brzegach stoją litery 'a' i 'b', a między nimi - nie liczba.

Задание 5

Dany jest ciąg:

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

Napisz wyrażenie regularne, które znajdzie ciągi następującego rodzaju: po brzegach stoją litery 'a' i 'b', a między nimi - nie litera i nie cyfra.

Задание 6

Dany jest ciąg:

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

Napisz wyrażenie regularne, które zamieni wszystkie spacje na '!'.