# Группы символов в регулярных выражениях 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 = 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'; ?>`

Напишите регулярку, которая заменит все пробелы на `'!'`.

←→
↑