Polecenie 'lub' w wyrażeniach regularnych PHP

W tej lekcji przeanalizujemy polecenie |, które stanowi bardziej zaawansowany wariant LUB w porównaniu do polecenia []. To polecenie pozwala podzielić wyrażenie regularne na kilka części. Przy tym szukany ciąg może pasować albo do jednej części wyrażenia, albo do drugiej. Spójrzmy na przykładach.

Przykład

W tym przykładzie wzorzec wyszukiwania jest następujący: trzy litery 'a' lub trzy litery 'b':

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

W rezultacie do zmiennej zapisze się następujący ciąg:

php'! ! abb'

Przykład

W tym przykładzie wzorzec wyszukiwania jest następujący: trzy litery 'a' lub od 1 i więcej liter 'b':

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

W rezultacie do zmiennej zapisze się następujący ciąg:

php'! ! ! ! axx'

Przykład

W tym przykładzie wzorzec wyszukiwania jest następujący: jedna lub więcej liter lub trzy cyfry:

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

W rezultacie do zmiennej zapisze się następujący ciąg:

php'! ! ! 1 12 !'

Przykład

Pionowa kreska może dzielić wyrażenie regularne nie na dwie części, ale na dowolną liczbę części:

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

W rezultacie do zmiennej zapisze się następujący ciąg:

php'! ! ! ddd'

Przykład

Jeśli pionowa kreska znajduje się wewnątrz okrągłych nawiasów, to 'lub' działa tylko wewnątrz tych nawiasów. Dla przykładu znajdźmy ciągi według następującego wzorca: na początku stoi lub 'a', lub 'b' jeden lub więcej razy, a potem dwie litery 'x':

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

W rezultacie do zmiennej zapisze się następujący ciąg:

php'! ! ! exx'

Zadania praktyczne

Задание 1

Dany jest ciąg:

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

Napisz wyrażenie regularne, które znajdzie ciągi według wzorca: na brzegach stoją litery 'a', a pomiędzy nimi - lub litera 'e' dowolną liczbę razy lub litera 'x' dowolną liczbę razy.

Задание 2

Dany jest ciąg:

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

Napisz wyrażenie regularne, które znajdzie ciągi według wzorca: na brzegach stoją litery 'a', a pomiędzy nimi - lub litera 'e' dwa razy lub litera 'x' dowolną liczbę razy.