⊗ppPmRgEP 254 of 447 menu

Групи в регулярен израз в PHP

Съдържанието на групите е достъпно не само в низа за замяна, но и в самия регулярен израз: ние можем да поставим нещо в група, а след това директно в регулярния израз да кажем, че тук трябва да стои съдържанието на тази група.

Съдържанието на групите е достъпно по техните номера, пред които стои обратна наклонена черта. Например, нулевата група ще бъде достъпна ето така: \0, първата група ето така - \1, втората - \2 и така нататък.

Сигурен съм, че всичко написано по-горе все още е доста неясно за вас. Това не е изненадващо, тъй като групите - най-малко разбираното място в регулярните изрази. Нека да разберем с примери.

Пример

Нека имаме следния низ:

<?php $str = 'aa bb cd ef'; ?>

Нека намерим в него всички места, в които стоят две еднакви букви подред. За решаване на задачата ще търсим всяка буква, ще я поставяме в група, а след това ще проверяваме, дали следващият символ е съдържанието на тази група:

<?php $res = preg_replace('#([a-z])\1#', '!', $str); ?>

В резултат в променливата ще се запише следното:

'! ! cd ef'

Пример

Нека имаме следния низ:

<?php $str = 'asxca buzxb csgd'; ?>

Нека намерим в него всички думи, в които първата и последната буква са еднакви. За решаване на задачата ще напишем следния шаблон: буква, следвана от още една или повече букви, а след това същата буква като първата:

<?php $res = preg_replace('#([a-z])[a-z]+\1#', '!', $str); ?>

В резултат в променливата ще се запише следното:

'! ! csgd'

Пример

Вместо \1 може да се пише \g1:

<?php $res = preg_replace('#([a-z])[a-z]+\g1#', '!', $str); ?>

Пример

Може също така да се пише \g{1}:

<?php $res = preg_replace('#([a-z])[a-z]+\g{1}#', '!', $str); ?>

Пример

Във фигурните скоби могат да се указват отрицателни числа. В този случай групите ще се броят от края:

<?php $res = preg_replace('#([a-z])([a-z])\g{-2}#', '!', $str); ?>

Практически задачи

Даден е низ:

<?php $str = 'aaa bbb ccc xyz'; ?>

Намерете всички поднизове, в които има три еднакви букви подред.

Даден е низ:

<?php $str = 'a aa aaa abab bbbb'; ?>

Намерете всички поднизове, в които има две или повече еднакви букви подред.

Даден е низ:

<?php $str = 'aaa aaa bbb bbb ccc ddd'; ?>

Намерете всички поднизове, в които има две еднакви думи подред.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне