Разработка магазинов с гарантией попадания в ТОП поисковых систем

Узнать подробнее
Eltisbook > PHP учебник > Регулярные выражения > Условные подвыражения в PHP

Условные подвыражения в PHP

В регулярных выражениях существуют условные выражения, применимые к подшаблонам.

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

Условные подвыражения

Существуют две основные формы записи условных подвыражений:

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

( \( )? [^()]+ (?(1) \) )

Первая часть этого РВ опционально совпадает с открывающейся круглой скобкой, и если этот символ присутствует, то устанавливает его как первое захваченное подвыражение.

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

Третья часть РВ – это условное подвыражение, которое проверяет, совпало ли первое множество скобок или нет (попалась ли нам в строке открывающая круглая скобка).

Если попалась, то есть объект (строка) начинается с символа «(», то условие верно и вычисляется условный шаблон, а именно требуется наличие закрывающей круглой скобки. В противном случае подшаблон ни с чем не совпадает.

Если условие не последовательность цифр, то оно должно быть утверждением. Это может быть позитивное или негативное «смотрящее вперед» или «смотрящее назад» утверждение.

(?(?=[^a – z]*[a – z])\d{2} – [a – z]{3} – \d{2} |\d{2} – \d{2} – \d{2})

Условие здесь – позитивное «смотрящее вперед» утверждение. Оно совпадает с любой последовательностью не букв, после которых идет буква. Другими словами, оно проверяет присутствие хотя бы одной буквы в строке для поиска. Если буква найдена, то производится сравнение по первому альтернативному варианту шаблона (\d{2} – [a – z]{3} – \d{2}), иначе – по второму (\d{2} – \d{2} – \d{2}). Этому шаблону удовлетворяют строки двух типов: dd – aaa – dd или dd – dd – dd, где d – любая цифра, a – любая буква.