Příkaz 'nebo' v regulárních výrazech PHP

V této lekci rozebereme příkaz |, který představuje výkonnější verzi NEBO ve srovnání s příkazem []. Tento příkaz umožňuje rozdělit regulární výraz na několik částí. Hledaný výraz pak může odpovídat buď jedné části regulárního výrazu, nebo druhé. Podívejme se na příklady.

Příklad

V tomto příkladu je vzor hledání následující: tři písmena 'a' nebo tři písmena 'b':

php<?php
  $str = 'aaa bbb abb';
  $res = preg_replace('#a{3}|b{3}#', '!', $str);
?>

Výsledek zapsaný do proměnné bude následující:

php'! ! abb'

Příklad

V tomto příkladu je vzor hledání následující: tři písmena 'a' nebo od 1 a více písmen 'b':

php<?php
  $str = 'aaa bbb bbbb bbbbb axx';
  $res = preg_replace('#a{3}|b+#', '!', $str);
?>

Výsledek zapsaný do proměnné bude následující:

php'! ! ! ! axx'

Příklad

V tomto příkladu je vzor hledání následující: jedno nebo více písmen nebo tři číslice:

php<?php
  $str = 'a ab abc 1 12 123';
  $res = preg_replace('#[a-z]+|\d{3}#', '!', $str);
?>

Výsledek zapsaný do proměnné bude následující:

php'! ! ! 1 12 !'

Příklad

Svislítko může rozdělit regulární výraz ne na dvě části, ale na libovolný počet částí:

php<?php
  $str = 'aaa bbb ccc ddd';
  $res = preg_replace('#a+|b+|c+#', '!', $str);
?>

Výsledek zapsaný do proměnné bude následující:

php'! ! ! ddd'

Příklad

Pokud se svislítko nachází uvnitř kulatých závorek, pak 'nebo' funguje pouze uvnitř těchto závorek. Jako příklad nalezněme řetězce podle následujícího vzoru: na začátku je buď 'a', nebo 'b' jedno nebo více krát, a poté dvě písmena 'x':

php<?php
  $str = 'axx bxx bbxx exx';
  $res = preg_replace('#(a|b+)xx#', '!', $str);
?>

Výsledek zapsaný do proměnné bude následující:

php'! ! ! exx'

Praktické úlohy

Задание 1

Je dán řetězec:

php<?php
  $str = 'aeeea aeea aea axa axxa axxxa';
?>

Napište regulární výraz, který najde řetězce podle vzoru: na okrajích jsou písmena 'a', a mezi nimi - buď písmeno 'e' libovolný počet krát nebo písmeno 'x' libovolný počet krát.

Задание 2

Je dán řetězec:

php<?php
  $str = 'aeeea aeea aea axa axxa axxxa';
?>

Napište regulární výraz, který najde řetězce podle vzoru: na okrajích jsou písmena 'a', a mezi nimi - buď písmeno 'e' dvakrát nebo písmeno 'x' libovolný počet krát.