⊗ppPmRgEP 254 of 447 menu

Grupy przechwytujące w wyrażeniach regularnych w PHP

Zawartość grup przechwytujących jest dostępna nie tylko w łańcuchu zastępowania, ale także w samym wyrażeniu regularnym: możemy coś umieścić w grupie, a następnie bezpośrednio w wyrażeniu regularnym powiedzieć, że w tym miejscu powinna znajdować się zawartość tej grupy.

Zawartość grup przechwytujących jest dostępna za pomocą ich numerów, przed którymi stoi odwrócony ukośnik. Na przykład, grupa zerowa będzie dostępna w ten sposób: \0, pierwsza grupa w ten sposób - \1, druga - \2 i tak dalej.

Jestem pewien, że wszystko, co napisano powyżej, jest na razie bardzo mgliste dla Ciebie. To nie dziwi, ponieważ grupy przechwytujące to najbardziej niezrozumiałe miejsce w wyrażeniach regularnych. Przejdźmy do przykładów.

Przykład

Załóżmy, że mamy taki łańcuch:

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

Znajdźmy w nim wszystkie miejsca, w których występują dwie dowolne, identyczne litery pod rząd. Aby rozwiązać zadanie, będziemy szukać dowolnej litery, umieszczać ją w grupie przechwytującej, a następnie sprawdzać, czy następnym symbolem jest zawartość tej grupy:

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

W wyniku do zmiennej zapisze się następująca wartość:

'! ! cd ef'

Przykład

Załóżmy, że mamy taki łańcuch:

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

Znajdźmy w nim wszystkie słowa, w których pierwsza i ostatnia litera są identyczne. Aby rozwiązać zadanie, napiszemy następujący wzorzec: litera, następnie jedna lub więcej liter, a następnie taka sama litera jak pierwsza:

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

W wyniku do zmiennej zapisze się następująca wartość:

'! ! csgd'

Przykład

Zamiast \1 można pisać \g1:

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

Przykład

Można również pisać \g{1}:

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

Przykład

W nawiasach klamrowych można podawać liczby ujemne. W tym przypadku grupy będą liczone od końca:

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

Zadania praktyczne

Dany jest łańcuch:

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

Znajdź wszystkie podłańcuchy, w których występują trzy identyczne litery pod rząd.

Dany jest łańcuch:

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

Znajdź wszystkie podłańcuchy, w których występują dwie lub więcej identycznych liter pod rząd.

Dany jest łańcuch:

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

Znajdź wszystkie podłańcuchy, w których występują dwa identyczne słowa pod rząd.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć