Grupper i regulære uttrykk i PHP
Innholdet i grupper er tilgjengelig ikke bare i erstatningsstrengen, men også i selve det regulære uttrykket: vi kan legge noe i en gruppe, og deretter direkte i det regulære uttrykket si at innholdet av denne gruppen skal stå her.
Innholdet i grupper er tilgjengelig via deres numre,
med et bakovervendt skråstreng foran. For eksempel,
gruppe null vil være tilgjengelig slik: \0,
første gruppe slik - \1, andre
- \2 og så videre.
Jeg er sikker på at alt skrevet ovenfor foreløpig er ganske uklart for deg. Dette er ikke overraskende, ettersom grupper er det mest vanskelige å forstå i regulære uttrykk. La oss gå gjennom det med eksempler.
Eksempel
La oss si at vi har en streng som denne:
<?php
$str = 'aa bb cd ef';
?>
La oss finne alle stedene i den hvor det står to like bokstaver etter hverandre. For å løse oppgaven vil vi søke etter en hvilken som helst bokstav, legge den i en gruppe, og deretter sjekke om neste symbol er innholdet i denne gruppen:
<?php
$res = preg_replace('#([a-z])\1#', '!', $str);
?>
Resultatet som skrives til variabelen blir følgende:
'! ! cd ef'
Eksempel
La oss si at vi har en streng som denne:
<?php
$str = 'asxca buzxb csgd';
?>
La oss finne alle ordene i den hvor den første og siste bokstaven er like. For å løse oppgaven skriver vi følgende mønster: bokstav, deretter en eller flere bokstaver til, og deretter samme bokstav som den første:
<?php
$res = preg_replace('#([a-z])[a-z]+\1#', '!', $str);
?>
Resultatet som skrives til variabelen blir følgende:
'! ! csgd'
Eksempel
I stedet for \1 kan man skrive \g1:
<?php
$res = preg_replace('#([a-z])[a-z]+\g1#', '!', $str);
?>
Eksempel
Man kan også skrive \g{1}:
<?php
$res = preg_replace('#([a-z])[a-z]+\g{1}#', '!', $str);
?>
Eksempel
I krøllparenteser kan man angi negative tall. I dette tilfellet vil gruppene telles fra slutten:
<?php
$res = preg_replace('#([a-z])([a-z])\g{-2}#', '!', $str);
?>
Praktiske oppgaver
Gitt en streng:
<?php
$str = 'aaa bbb ccc xyz';
?>
Finn alle delstrenger som har tre like bokstaver etter hverandre.
Gitt en streng:
<?php
$str = 'a aa aaa abab bbbb';
?>
Finn alle delstrenger som har to eller flere like bokstaver etter hverandre.
Gitt en streng:
<?php
$str = 'aaa aaa bbb bbb ccc ddd';
?>
Finn alle delstrenger som har to like ord etter hverandre.