Zárójelek a reguláris kifejezésekben PHP-ben
A zárójelek tartalma nem csak a csere sztringben érhető el, hanem magában a reguláris kifejezésben is: tehetünk valamit egy zárójelbe, majd magában a reguláris kifejezésben megadhatjuk, hogy annak a zárójelnek a tartalmának kell itt állnia.
A zárójelek tartalma a sorszámukon keresztül érhető el,
amelyek elé fordított perjel kerül. Például,
a nulladik zárójel így érhető el: \0,
az első zárójel így - \1, a második
- \2 és így tovább.
Biztos vagyok benne, hogy a fent írtak eddig nagyon homályosak az Ön számára. Ez nem meglepő, hiszen a zárójelek a reguláris kifejezések legkevésbé érthető részei. Nézzünk példákat.
Példa
Tegyük fel, hogy van egy ilyen sztringünk:
<?php
$str = 'aa bb cd ef';
?>
Keressük meg benne mindazokat a helyeket, ahol bármelyik két azonos betű áll egymás után. A feladat megoldásához keressünk bármelyik betűt, tegyük egy zárójelbe, majd ellenőrizzük, hogy a következő karakter megegyezik-e a zárójel tartalmával:
<?php
$res = preg_replace('#([a-z])\1#', '!', $str);
?>
Ennek eredményeként a változóba a következő íródik:
'! ! cd ef'
Példa
Tegyük fel, hogy van egy ilyen sztringünk:
<?php
$str = 'asxca buzxb csgd';
?>
Keressük meg benne mindazokat a szavakat, amelyekben az első és az utolsó betű megegyezik. A feladat megoldásához írjuk a következő mintát: betű, majd egy vagy több további betű, majd ugyanaz a betű, mint az első:
<?php
$res = preg_replace('#([a-z])[a-z]+\1#', '!', $str);
?>
Ennek eredményeként a változóba a következő íródik:
'! ! csgd'
Példa
A \1 helyett írhatunk \g1-et is:
<?php
$res = preg_replace('#([a-z])[a-z]+\g1#', '!', $str);
?>
Példa
Írhatunk \g{1}-et is:
<?php
$res = preg_replace('#([a-z])[a-z]+\g{1}#', '!', $str);
?>
Példa
A kapcsos zárójelekben negatív számokat is megadhatunk. Ebben az esetben a zárójelek végtől számolva lesznek meghatározva:
<?php
$res = preg_replace('#([a-z])([a-z])\g{-2}#', '!', $str);
?>
Gyakorlati feladatok
Adott egy sztring:
<?php
$str = 'aaa bbb ccc xyz';
?>
Keresse meg az összes olyan részsztringet, ahol három ugyanolyan betű áll egymás után.
Adott egy sztring:
<?php
$str = 'a aa aaa abab bbbb';
?>
Keresse meg az összes olyan részsztringet, ahol két vagy több ugyanolyan betű áll egymás után.
Adott egy sztring:
<?php
$str = 'aaa aaa bbb bbb ccc ddd';
?>
Keresse meg az összes olyan részsztringet, ahol két ugyanolyan szó áll egymás után.