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
$str = 'aaa bbb abb';
$res = preg_replace('#a{3}|b{3}#', '!', $str);
?>
W rezultacie do zmiennej zapisze się następujący ciąg:
'! ! 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
$str = 'aaa bbb bbbb bbbbb axx';
$res = preg_replace('#a{3}|b+#', '!', $str);
?>
W rezultacie do zmiennej zapisze się następujący ciąg:
'! ! ! ! axx'
Przykład
W tym przykładzie wzorzec wyszukiwania jest następujący: jedna lub więcej liter lub trzy cyfry:
<?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:
'! ! ! 1 12 !'
Przykład
Pionowa kreska może dzielić wyrażenie regularne nie na dwie części, ale na dowolną liczbę części:
<?php
$str = 'aaa bbb ccc ddd';
$res = preg_replace('#a+|b+|c+#', '!', $str);
?>
W rezultacie do zmiennej zapisze się następujący ciąg:
'! ! ! 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
$str = 'axx bxx bbxx exx';
$res = preg_replace('#(a|b+)xx#', '!', $str);
?>
W rezultacie do zmiennej zapisze się następujący ciąg:
'! ! ! exx'
Zadania praktyczne
Dany jest ciąg:
<?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.
Dany jest ciąg:
<?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.