Изучаем регулярные выражения самостоятельно - круглые скобки ( часть 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 выглядит таким образом:

вывести содержимое массива php

Получился двухмерный массив, состоящий из одного массива, который имеет только один элемент.

Но, мы знаем, что строка может соответствовать регулярному выражению не только целиком, но и частично. То есть, цифры 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);
?>

Открываем страницу в браузере, и видим, что содержимое массива совпадении выглядит уже по-другому:

php многомерный массив

Также получился двухмерный массив, но уже со всеми найденными соответствиями в указанной строке.

Если мы объединим в одну круглую скобку последние 6 цифры, то есть номер телефона, то увидим, что, последний элемент массива будет состоять именно из этих 6 цифр.

Изменяем регулярное выражение:

<?php
    //Международный формат молдавского номера телефона
    $reg1 = '/\+(\d{3})-(\d{2})-(\d{3}-\d{3})/';
?>

Обновляем страницу и видим, что содержимое массива поменялось:

php вывести массив на экран

Последний элемент содержит номер телефона, он соответствует этой группе скобок: (\d{3}-\d{3}).

Ну и на этом всё. Надеюсь Вы поняли для чего используются круглые скобки в регулярные выражения. Теперь Вы можете применить полученные знания на практике.

Задачи

  1. Для чего используются квадратные скобки? Напишите пример.
  2. Для чего используются фигурные скобки? Напишите пример.
  3. В каких случаях используются круглые скобки? Напишите по примеру для каждого случая.

    В статье, для второго случая мы использовали строку с номером телефона в международном формате. Напишите аналогичный пример, но уже со строкой с Вашим IP. IP можно узнать на сайте 2ip.ru

Понравилась статья?

Тогда поделитесь ею с друзьями и подпишитесь на новые интересные статьи.

Поделиться с друзьями:

Подписаться на новые статьи:

Delivered by FeedBurner

Поддержите пожалуйста мой проект!

<< Предыдущая статьяСледующая статья >>

Если у Вас есть какие-то вопросы или предложения, то можете писать их в комментариях или мне на почту sergiu1607@gmail.com. И если Вы заметили какую-то ошибку в статье, то прошу Вас, сообщите мне об этом, и в ближайшее время я всё исправлю.

Добавляйтесь ко мне в друзья в:

Добавляйтесь в мои группы:

Подпишитесь на мои каналы:

Автор статьи: Мунтян Сергей

Копирование материалов с сайта sozdatisite.ru ЗАПРЕЩЕНО!!!

Дата добавления: 2017-02-08 01:08:04