Групи символи в регулярни изрази на PHP
Съществуват специални команди, които позволяват
избор на цели групи символи наведнъж. Командата
\d означава цифра от 0 до 9.
Командата \w обозначава цифра, латинска
буква или знак за подчертаване. Командата \s
обозначава интервал или whitespace символ:
интервал, нов ред, табулация. Може да
инвертирате значението на командата, като напишете главна
буква: например, ако \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!'
Пример
В този пример шаблонът за търсене изглежда така: whitespace символ един път:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\s#', '!', $str);
?>
В резултат в променливата ще бъде записано следното:
'1!12!123!abc!@@@'
Пример
В този пример шаблонът за търсене изглежда така:
НЕ whitespace символ един или повече пъти.
Всички поднизове, разделени с интервали, ще бъдат заменени
с '!':
<?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';
?>
Напишете регулярен израз, който ще замени всички интервали
с '!'.