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

Постоје специјалне команде које омогућавају одабир одмах читавих група симбола. Команда \d значи цифру од 0 до 9. Команда \w означава цифру, латинично слово или знак доње црте. Команда \s означава размак или размакни симбол: размак, прелазак у нови ред, табулацију. Може се инвертовати вредност команде, писањем великог слова: на пример, ако је \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!'

Пример

У овом примеру шаблон претраге изгледа овако: размакни симбол једном:

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

Као резултат у променљиву ће бити уписано следеће:

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

Пример

У овом примеру шаблон претраге изгледа овако: НИЈЕ размакни симбол једном или више пута. Све подниске, подељене размацима, биће замењене са '!':

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';
?>

Напишите регуларни израз који ће заменити све размаке на '!'.