Учебник по основам PHP. PHPBeginner


Синтаксис регулярных выражений - часть 5


Повторения и числители

Предположим, вы хотите найти в тексте номер, состоящий из 3-5 десятичных цифр, тогда в шаблоне необходимо указать \d{3,5}. Как вы можете догадаться, повторения символа (или, возможно, подшаб-лона) обозначаются указанием после него чисел в фигурных скобках, где первое число — минимально допустимое повторение символа (подшаблона), а после запятой — максимальное. Числители могут представляться также в следующем виде:

  • {n} — повторение, указанное n число раз;
  • {n,} — повторение, не меньше чем n раз.

Пропуск числителя до запятой не допускается. Первый числитель должен быть меньше второго. Вместо распространенных числителей можно также указывать их заменители:

Заменитель числителя

Значение

Эквивалент

у

« 1 или 0 раз»

{0,1}

*

«0 или более раз»

{0,}

+

«1 или более раз»

1.}

Будьте осторожны с неопределенными числителями, чтобы не спровоцировать бесконечный цикл.

При конструировании шаблонов с диапазонными повторениями необходимо учитывать такой фактор, как жадность числителей, то есть такой случай, когда шаблону может соответствовать как меньшее, так и большее число повторений. Положим, у нас имеется текст:

<Р> Текст <Р> абзаца</Р> со вложениями </Р>

Тогда шаблон /<p>(.*)<\/p>/i может (теоретически) вернуть 4 варианта совпадения. По умолчанию ищется максимальное повторение (то есть в данном варианте — строка целиком). Чтобы находилось минимально повторяющееся значение, используйте модификатор U. Для снижения «жадности» не всех числителей а только избранных ставьте после них знак вопроса, например: /<p>(.*?)<\/p>/i; этот способ изменяет «жадность» числителя на противоположную от основной.

Числитель может указываться не только после символа, класса, под-шаблона, но и после обратной ссылки.

Подшаблоны и обратные ссылки

Сами по себе подшаблоны (части шаблона, заключенные в круглые скобки) не влияют на функционирование регулярных выражений и могут служить исключительно для удобства группировки (они могут быть вложенными). Подшаблон может использоваться для ограничения набора альтернатив. При использовании же с обратными ссылками подшаблоны являются действенным инструментом поиска. Например, для поиска содержимого парных тегов может использоваться запись: *<([*>]*)>(.*)</\\1>*.




Начало  Назад  Вперед