Sakke in gereelde uitdrukking in PHP
Die inhoud van sakke is nie net beskikbaar in die vervangingsstring nie, maar ook in die gereelde uitdrukking self: ons kan iets in 'n sak plaas, en dan reguit in die gereelde uitdrukking sê dat die inhoud van daardie sak hier moet wees.
Die inhoud van sakke is beskikbaar volgens hul nommers,
met 'n backslash voor hulle. Byvoorbeeld,
die nulde sak sal so beskikbaar wees: \0,
die eerste sak so - \1, die tweede
- \2 en so aan.
Ek is seker dat alles hierbo geskryf vir jou nog baie vaag is. Dit is nie verbasend nie, aangesien sakke die mees onverstaanbare deel van gereelde uitdrukkings is. Kom ons verduidelik met voorbeelde.
Voorbeeld
Laat ons 'n string soos hierdie hê:
<?php
$str = 'aa bb cd ef';
?>
Kom ons vind daarin alle plekke waar twee enige soortgelyke letters agtermekaar is. Om die probleem op te los, sal ons enige letter soek, dit in 'n sak plaas, en dan toets of die volgende simbool die inhoud van daardie sak is:
<?php
$res = preg_replace('#([a-z])\1#', '!', $str);
?>
As gevolg sal die volgende in die veranderlike weggeskryf word:
'! ! cd ef'
Voorbeeld
Laat ons 'n string soos hierdie hê:
<?php
$str = 'asxca buzxb csgd';
?>
Kom ons vind daarin alle woorde waarvan die eerste en laaste letters dieselfde is. Om die probleem op te los, skryf ons die volgende patroon: letter, dan een of meer letters, en dan dieselfde letter as die eerste:
<?php
$res = preg_replace('#([a-z])[a-z]+\1#', '!', $str);
?>
As gevolg sal die volgende in die veranderlike weggeskryf word:
'! ! csgd'
Voorbeeld
In plaas van \1 kan jy \g1 skryf:
<?php
$res = preg_replace('#([a-z])[a-z]+\g1#', '!', $str);
?>
Voorbeeld
Jy kan ook \g{1} skryf:
<?php
$res = preg_replace('#([a-z])[a-z]+\g{1}#', '!', $str);
?>
Voorbeeld
In krulhakies kan jy negatiewe getalle specifiseer. In hierdie geval sal sakke getel word van die einde af:
<?php
$res = preg_replace('#([a-z])([a-z])\g{-2}#', '!', $str);
?>
Praktiese take
Gegee 'n string:
<?php
$str = 'aaa bbb ccc xyz';
?>
Vind alle substrings waarin daar drie soortgelyke letters agtermekaar is.
Gegee 'n string:
<?php
$str = 'a aa aaa abab bbbb';
?>
Vind alle substrings waarin daar twee of meer soortgelyke letters agtermekaar is.
Gegee 'n string:
<?php
$str = 'aaa aaa bbb bbb ccc ddd';
?>
Vind alle substrings waarin daar twee soortgelyke woorde agtermekaar is.