От автора: продолжаем начатый экскурс в символьную «составляющую» изучаемого языка. Сегодня мы узнаем, для чего используются в PHP регулярные выражения скобки.
Не обычные, а метасимволы!
Нам опять не повезло, потому что скобки в регулярках тоже являются метасимволами, и их применение требует внимания и знания особенностей их использования. Чтобы быстрее понималось, начнем с примера.
Предположим, что нужно найти в тексте подстроку, состоящую из конкретного сочетания цифр, заключенных в овальные скобки. Пытаемся:
1 2 3 4 5 6 7 8 |
<?php $stroka="текст 123"; if(preg_match("/(123)/",$stroka)) { echo "Подстрока в тексте найдена"; } else echo "Подстрока в тексте не найдена"; ?> |
Вроде бы все правильно работает! Но только на первый взгляд. Немного изменим содержание строки: текст 1234
И снова код выдает сообщение о том, что подстрока найдена. Хотя нас интересует подстрока (123). Что же не так с используемой регуляркой? Смотрим на нее: /(123)/
Вспоминаем, что и фигурные, и овальные скобки расцениваются PHP как метасимволы. Поэтому их нужно экранировать. Чего мы не сделали. Этот паттерн задает для поиска группу символов, состоящую из цифр, потому что используемые здесь метасимволы («()») предназначены для группировки символов для поиска.
Правильное регулярное выражение с экранированными скобками: /\(123\)/
1 2 3 4 5 6 7 8 9 |
<?php $stroka="текст (123)"; if(preg_match("/\(123\)/",$stroka)) { echo "Подстрока в тексте найдена"; } else echo "Подстрока в тексте не найдена"; ?> |
Другие
Теперь поговорим о других скобках – квадратных («[ ]»). В шаблонах регулярок они интерпретируются ядром PHP как метасимвол. Значения, указанные внутри них, задают подмножество (диапазон) для поиска. Если их использовать в предыдущем примере, то регулярный паттерн будет выглядеть следующим образом: /[1-3]/
Также такие скобки применяются в языке для инициализации массива. Упрощенный синтаксис поддерживает версией PHP 5.4 и выше.
Фигурные скобки в регулярках задают число повторений искомого значения. В следующем примере в скобках шаблона указывается, что символ a должен повторяться три и более раз.
Также «фигуристые» скобки используются для «дописывания» значений переменных следующим образом:
1 2 3 4 |
<?php $name2="ович"; echo "Богатый мужик - Абрам{$name2}. <br/>"; ?> |
И вообще, советую быть внимательнее при использовании различных спецсимволов. Даже в рамках одной программной платформы или CMS они могут интерпретироваться по-разному. Что часто является причиной различных «специфических» багов. Например, как проблема с index route account register в OpenCart. Но это уже другая история :).