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

Resultatet som skrives til variabelen blir følgende:

php'! ! cd ef'

Eksempel

La oss si at vi har en streng som denne:

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

Resultatet som skrives til variabelen blir følgende:

php'! ! csgd'

Eksempel

I stedet for \1 kan man skrive \g1:

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

Eksempel

Man kan også skrive \g{1}:

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

Praktiske oppgaver

Задание 1

Gitt en streng:

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

Finn alle delstrenger som har tre like bokstaver etter hverandre.

Задание 2

Gitt en streng:

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

Finn alle delstrenger som har to eller flere like bokstaver etter hverandre.

Задание 3

Gitt en streng:

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

Finn alle delstrenger som har to like ord etter hverandre.