Изучаем регулярные выражения самостоятельно - круглые скобки ( часть 6 )

Продолжаем изучать регулярные выражения. И в эту статью мы поговорим о роли круглых скобок. Узнаем зачем они нужны и как их использовать.
>Что касается остальных видов скобок, то, из статьи Изучаем регулярные выражения самостоятельно – диапазоны (часть 4) , мы уже знаем, что в квадратных скобках, пишется диапазон, который может состоять из группы различных символов или из интервалов. И этому диапазону может соответствовать какой-то символ из строки, если этот символ присутствует в заданной группе символов или входит в один из указанных интервалов.
А фигурные скобки используются для указания конкретного количества повторений, от и до. С ними мы познакомились в статье Изучаем регулярные выражения самостоятельно – квантификаторы повторений (часть 3) .
Круглые скобки имеют роль группирования. Их ещё называют группирующими скобками, и используются они в двух случаях.
Повторение группы символов
Первый случай применения круглых скобок, это когда нужно сгруппировать для удобного повторения, какую-то часть символов из регулярного выражения.
Например, изначально наше регулярное выражение выглядит таким образом:
var reg = /98xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz123/;
Используя круглые скобки и одного из квантификаторов повторений, мы сокращаем длину нашего регулярного выражения, до такого вида:
var reg = /98(xyz)*123/;
Теперь наше регулярное выражение стало короче, нагляднее и выглядит она уже по-человечески.
Это у нас был первый случай применения круглых скобок.
Удобная обработка данных
Второй случай использования круглых скобок, это когда необходимо написать регулярное выражение таким образом, чтобы потом было удобно работать с найденными соответствиями, в заданной строке.
Для лучшего понимания данного случая, приведу пример на языке PHP.
Допустим, нам нужно проверить, правильно ли ввёл пользователь молдавский номер телефона, в международном формате.
Например, пользователь прислал нам такой номер телефона: +373-69-813-500. Где, 373 это код страны и 69 — это код молдавского оператора, остальные цифры являются самим номером.
Для начала, поэкспериментируем с регулярным выражением без круглых скобок.
<?php //Международный формат молдавского номера телефона $reg = '/\+\d{3}-\d{2}-\d{3}-\d{3}/'; ?>
С помощью функции preg_match('регулярное_выражение', 'строка_для_проверки'), проверяем, соответствует ли регулярному выражению, полученный номер телефона.
<?php echo '<p>Результат проверки (регулярное выражение <strong>без скобок</strong>) = '.preg_match($reg, '+373-69-813-500').'</p>'; //1 ?>
Функция preg_match(), возвращает true(при выводе отображается 1), если полученная строка соответствует указанному регулярному выражению и false(при выводе отображается пустая строка, то есть ничего), в противном случае.
Подробную информацию об этой функции Вы можете почитать в справочнике .
И так, запускаем этот скрипт в браузере, и видим, что результат проверки равен true.
Теперь, в другую переменную, запишем это же регулярное выражение, только уже с применением круглых скобок.
<?php //Международный формат молдавского номера телефона $reg1 = '/\+(\d{3})-(\d{2})-(\d{3})-(\d{3})/'; ?>
Также проверяем полученную строку на соответствие.
<?php echo '<p>Результат проверки (регулярное выражение <strong>со скобоками</strong>) = '.preg_match($reg1, '+373-69-813-501').'</p>'; //1 ?>
Обновляем страницу в браузере, и видим, что, результат проверки также равен true.
Но, смысл применения круглых скобок виден в другом случае. А именно когда мы добавляем найденные соответствия в массив.
Дело в том, что работать с массивом гораздо легче чем с целой строкой.
Для добавления найденных соответствий в массив, используется функция preg_match_all('регулярное_выражение', 'строка_для_проверки', $массив_соответствий).
Подробную информацию об этой функции Вы можете почитать в справочнике .
И так, берём регулярное выражение из переменной $reg (которая без круглых скобок) и строку с примером номера телефона и добавляем их в параметры функции preg_match_all().
<?php preg_match_all($reg, '+373-69-813-501', $matches); echo 'Массив соответствии из регулярного выражения <strong>без скобок</strong>: <br />'; //Смотрим что находится в массиве print_r($matches); ?>
В результате работы данной функции, мы получаем массив, который содержит соответствия, найденные в заданной строке.
И так как регулярное выражение не содержит группирующих скобок, то в массиве $matches, попадает только одно совпадение. А именно целая строка, которая указана во втором параметре, функции preg_match_all().
Запускаем скрипт в браузере и видим, что содержимое массива $matches выглядит таким образом:

Получился двухмерный массив, состоящий из одного массива, который имеет только один элемент.
Но, мы знаем, что строка может соответствовать регулярному выражению не только целиком, но и частично. То есть, цифры 373 это первое соответствие, цифры 69 это второе соответствие, 813 — третье соответствие и 501 — четвёртое соответствие.
Так вот, мы используем круглые скобки, именно для того чтобы в массиве добавлялись все эти соответствия.
Теперь берём регулярное выражение уже со скобками ( она у нас находится в переменной $reg1 ) и добавляем её в первый параметр функции preg_match_all().
Во втором параметре также передаём нашу строку и в третьем указываем название массива, в котором будут добавляться все найденные совпадения.
<?php preg_match_all($reg1, '+373-69-813-500', $matches1); echo '<br /><br />Массив соответствии из регулярного выражения <strong>со скобоками</strong>: <br />'; //Смотрим что находится в массиве print_r($matches1); ?>
Открываем страницу в браузере, и видим, что содержимое массива совпадении выглядит уже по-другому:

Также получился двухмерный массив, но уже со всеми найденными соответствиями в указанной строке.
Если мы объединим в одну круглую скобку последние 6 цифры, то есть номер телефона, то увидим, что, последний элемент массива будет состоять именно из этих 6 цифр.
Изменяем регулярное выражение:
<?php //Международный формат молдавского номера телефона $reg1 = '/\+(\d{3})-(\d{2})-(\d{3}-\d{3})/'; ?>
Обновляем страницу и видим, что содержимое массива поменялось:

Последний элемент содержит номер телефона, он соответствует этой группе скобок: (\d{3}-\d{3}).
Ну и на этом всё. Надеюсь Вы поняли для чего используются круглые скобки в регулярные выражения. Теперь Вы можете применить полученные знания на практике.
Задачи
- Для чего используются квадратные скобки? Напишите пример.
- Для чего используются фигурные скобки? Напишите пример.
-
В каких случаях используются круглые скобки? Напишите по примеру для каждого случая.
В статье, для второго случая мы использовали строку с номером телефона в международном формате. Напишите аналогичный пример, но уже со строкой с Вашим IP. IP можно узнать на сайте 2ip.ru
Похожие статьи:
- Изучаем регулярные выражения самостоятельно – часть 1
- Изучаем регулярные выражения самостоятельно – символьные классы ( часть 2 )
- Изучаем регулярные выражения самостоятельно – квантификаторы повторений ( часть 3 )
- Изучаем регулярные выражения самостоятельно – диапазоны ( часть 4 )
- Изучаем регулярные выражения самостоятельно - Экранирование специальных символов ( часть 5 )
Понравилась статья?
Тогда поделитесь ею с друзьями и подпишитесь на новые интересные статьи.
Поделиться с друзьями:
Подписаться на новые статьи:
Поддержите пожалуйста мой проект!
Если у Вас есть какие-то вопросы или предложения, то можете писать их в комментариях или мне на почту sergiu1607@gmail.com. И если Вы заметили какую-то ошибку в статье, то прошу Вас, сообщите мне об этом, и в ближайшее время я всё исправлю.
Добавляйтесь ко мне в друзья в:
Добавляйтесь в мои группы:
Подпишитесь на мои каналы:
Автор статьи: Мунтян Сергей
Копирование материалов с сайта sozdatisite.ru ЗАПРЕЩЕНО!!!
Дата добавления: %date%