Групе симбола у регуларним изразима PHP
Постоје специјалне команде које омогућавају
одабир одмах читавих група симбола. Команда
\d значи цифру од 0 до 9.
Команда \w означава цифру, латинично
слово или знак доње црте. Команда \s
означава размак или размакни симбол:
размак, прелазак у нови ред, табулацију. Може се
инвертовати вредност команде, писањем великог
слова: на пример, ако је \d - цифра,
онда је \D - није цифра.
Пример
Хајде да пронађемо све цифре:
<?php
$str = '1 12 123';
$res = preg_replace('#\d#', '!', $str);
?>
Као резултат у променљиву ће бити уписано следеће:
'! !! !!!'
Пример
Оператори понављања сматрају команде-групе
једном целином, односно групишуће заграде
нису потребне. У следећем примеру шаблон претраге
изгледа овако: цифра од 0 до 9
једном или више пута:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\d+#', '!', $str);
?>
Као резултат у променљиву ће бити уписано следеће:
'! ! ! abc @@@'
Пример
У следећем примеру шаблон претраге изгледа
овако: било шта једном или више пута,
али не цифра од 0 до 9:
<?php
$str = '123abc3@@';
$res = preg_replace('#\D+#', '!', $str);
?>
Као резултат у променљиву ће бити уписано следеће:
'123!3!'
Пример
У овом примеру шаблон претраге изгледа овако: размакни симбол једном:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\s#', '!', $str);
?>
Као резултат у променљиву ће бити уписано следеће:
'1!12!123!abc!@@@'
Пример
У овом примеру шаблон претраге изгледа овако:
НИЈЕ размакни симбол једном или више пута.
Све подниске, подељене размацима, биће замењене
са '!':
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\S+#', '!', $str);
?>
Као резултат у променљиву ће бити уписано следеће:
'! ! ! ! !'
Пример
У овом примеру шаблон претраге изгледа овако:
цифра или слово једном или више пута.
Све подниске, које се састоје од цифара и слова,
биће замењене са '!':
<?php
$str = '1 12 123a Abc @@@';
$res = preg_replace('#\w+#', '!', $str);
?>
Као резултат у променљиву ће бити уписано следеће:
'! ! ! ! @@@'
Пример
У овом примеру шаблон претраге изгледа овако:
НИЈЕ цифра и НИЈЕ слово једном или више пута.
Под ово одређење у нашем случају спада
'@@@' и сви размаци (они такође
нису цифре ни слова). Обратите пажњу на
то да је на крају један '!' - у њега
се претворила ниска ' @@@' - са
размаком испред:
$str = '1 12 123 Abc @@@';
$res = preg_replace('#\W+#', '!', $str);
Као резултат у променљиву ће бити уписано следеће:
'1!12!123!Abc!'
Практични задаци
Дата је ниска:
<?php
$str = 'a1a a2a a3a a4a a5a aba aca';
?>
Напишите регуларни израз који ће пронаћи ниске,
у којима на ивицама стоје слова 'a',
а између њих једна цифра.
Дата је ниска:
<?php
$str = 'a1a a22a a333a a4444a a55555a aba aca';
?>
Напишите регуларни израз који ће пронаћи ниске,
у којима на ивицама стоје слова 'a',
а између њих било колико цифара.
Дата је ниска:
<?php
$str = 'aa a1a a22a a333a a4444a a55555a aba aca';
?>
Напишите регуларни израз који ће пронаћи ниске,
у којима на ивицама стоје слова 'a',
а између њих било колико цифара (укључујући
и нула цифара, односно ниска 'aa').
Дата је ниска:
<?php
$str = 'avb a1b a2b a3b a4b a5b abb acb';
?>
Напишите регуларни израз који ће пронаћи ниске
следећег вида: на ивицама стоје слова
'a' и 'b', а између њих - није
број.
Дата је ниска:
<?php
$str = 'ave a#b a2b a$b a4b a5b a-b acb';
?>
Напишите регуларни израз који ће пронаћи ниске
следећег вида: на ивицама стоје слова
'a' и 'b', а између њих - није
слово и није цифра.
Дата је ниска:
<?php
$str = 'ave a#a a2a a$a a4a a5a a-a aca';
?>
Напишите регуларни израз који ће заменити све размаке
на '!'.