Групы сімвалаў у рэгулярных выразах 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';
?>
Напішыце рэгулярку, якая замяніць усе прабелы
на '!'.