⊗ppPmRgEP 254 of 447 menu

Grupuri de captură în expresii regulate în PHP

Conținutul grupuri de captură este disponibil nu numai în sirul de înlocuire, ci și în expresia regulată însăși: noi putem pune ceva într-un grup de captură, apoi direct în expresia regulată să spunem că aici trebuie să fie conținutul acelui grup de captură.

Conținutul grupuri de captură este disponibil după numerele lor, în fața cărora se află un backslash. De exemplu, grupul de captură zero va fi accesat astfel: \0, primul grup de captură astfel - \1, al doilea - \2 și așa mai departe.

Sunt sigur că tot ce este scris mai sus este încă destul de neclar pentru tine. Acest lucru nu este surprinzător, deoarece grupuri de captură - este locul cel mai greu de înțeles al expresiilor regulate. Să înțelegem cu exemple.

Exemplu

Să presupunem că avem următorul sir:

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

Să găsim în el toate locurile în care se află două litere identice consecutive. Pentru a rezolva problema, vom căuta orice literă, o vom pune într-un grup de captură, apoi vom verifica dacă următorul simbol este conținutul acestui grup de captură:

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

Ca rezultat, în variabilă se va scrie următoarele:

'! ! cd ef'

Exemplu

Să presupunem că avem următorul sir:

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

Să găsim în el toate cuvintele în care prima și ultima literă sunt identice. Pentru a rezolva problema, vom scrie următorul șablon: literă, apoi încă una sau mai multe litere, iar apoi aceeași literă ca prima:

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

Ca rezultat, în variabilă se va scrie următoarele:

'! ! csgd'

Exemplu

În loc de \1 se poate scrie \g1:

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

Exemplu

Se poate scrie și \g{1}:

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

Exemplu

În acolade se pot indica numere negative. În acest caz, grupuri de captură vor fi numărate de la sfârșit:

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

Probleme practice

Este dat sirul:

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

Găsiți toate subșirurile în care există trei litere identice consecutive.

Este dat sirul:

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

Găsiți toate subșirurile în care există două sau mai multe litere identice consecutive.

Este dat sirul:

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

Găsiți toate subșirurile în care există două cuvinte identice consecutive.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge