Подшаблоны

Наверх  Предыдущий  Следующий

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

 

1.

Набор альтернатив становится локальным в подшаблоне. К примеру, шаблон:

cat(aract|erpillar|)

совпадет с одним из слов: "cat", "cataract" или "caterpillar". Если бы скобок не было, он совпал бы с "cataract" "erpillar" или пустой строкой.

2.

Подшаблоны могут быть использованы для захвата подстрок из исходной строки. Для этого ведется подсчет открывающихся скобок слева направо и подстрокам присваиваются порядковые номера, начиная с 1. К примеру, если строка "the red king" совпадает с шаблоном

the ((red|white) (king|queen))

то захваченными подстроками будут "red king", "red" и "king" с порядковыми номерами, соответственно, 1, 2 и 3.

 

Тот факт, что скобки играют двоякую роль, не всегда полезен. Часто бывает, что захват подстрок не нужен. Если после открывающейся скобки следует "?:", то данный подшаблон не участвует в захвате подстрок и пропускается при подсчете порядковых номеров подстрок. К примеру, если строка "the white queen" совпала с шаблоном

the ((?:red|white) (king|queen))

то захваченными подстроками будут "white queen" и "queen" с порядковыми номерами, соответственно, 1 и 2. Максимальное количество захватываемых подстрок равно 99, а максимальное количество подшаблонов равно 200.

 

Если в начале незахватываемого шаблона требуется установка опций, то, в качестве удобного сокращения, между "?" и ":" можно указывать буквы опций. Таким образом, шаблоны

(?i:saturday|sunday)

(?:(?i)saturday|sunday)

идентичны друг другу. Так как опции влияют на всю оставшуюся справа часть подшаблона и на все ветви альтернатив, с вышеупомянутыми шаблонами совпадет как "SUNDAY" так и "Saturday".