Существуют специальные команды, которые позволяют
выбрать сразу целые группы символов. Команда
\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 = str_replace(#\W+#, '!');
В результате в переменную запишется следующее:
'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';
?>
Напишите регулярку, которая заменит все пробелы
на '!'
.