⊗ppPmRgEP 254 of 447 menu

Capturing Groups in Reguliere Expressies in PHP

De inhoud van capturing groups is niet alleen beschikbaar in de vervangingsreeks, maar ook in de reguliere expressie zelf: we kunnen iets in een capturing group plaatsen, en dan direct in de reguliere expressie zeggen dat hier de inhoud van die capturing group moet staan.

De inhoud van capturing groups is beschikbaar via hun nummers, voorafgegaan door een backslash. Bijvoorbeeld, de nulde capturing group is zo beschikbaar: \0, de eerste capturing group zo - \1, de tweede - \2, enzovoort.

Ik ben er zeker van dat alles wat hierboven geschreven staat voor jou nogal duister is. Dat is niet verwonderlijk, aangezien capturing groups de minst begrepen plek zijn van reguliere expressies. Laten we het uitzoeken met voorbeelden.

Voorbeeld

Stel we hebben de volgende string:

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

Laten we er alle plekken in vinden waar twee willekeurige identieke letters achter elkaar staan. Om de taak op te lossen, zoeken we naar een willekeurige letter, plaatsen deze in een capturing group, en controleren dan of het volgende symbool de inhoud van deze capturing group is:

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

Het resultaat in de variabele zal zijn:

'! ! cd ef'

Voorbeeld

Stel we hebben de volgende string:

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

Laten we er alle woorden in vinden waar de eerste en de laatste letter identiek zijn. Om de taak op te lossen schrijven we het volgende patroon: letter, dan nog een of meer letters, en dan dezelfde letter als de eerste:

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

Het resultaat in de variabele zal zijn:

'! ! csgd'

Voorbeeld

In plaats van \1 kan men \g1 schrijven:

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

Voorbeeld

Men kan ook \g{1} schrijven:

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

Voorbeeld

In accolades kunnen negatieve getallen worden opgegeven. In dit geval worden de capturing groups vanaf het einde geteld:

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

Praktische opdrachten

Gegeven een string:

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

Vind alle substrings waarin drie identieke letters achter elkaar staan.

Gegeven een string:

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

Vind alle substrings waarin twee of meer identieke letters achter elkaar staan.

Gegeven een string:

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

Vind alle substrings waarin twee identieke woorden achter elkaar staan.

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren