PHP正規表現における'または'コマンド
このレッスンでは、[]コマンドよりも強力なORのバリエーションである|コマンドについて説明します。このコマンドは正規表現を複数の部分に分割することができます。その結果、検索対象は正規表現の一部に一致するか、別の部分に一致することになります。例を見てみましょう。
例
この例での検索パターンは次の通りです: 3つの'a'文字または3つの'b'文字:
<?php
$str = 'aaa bbb abb';
$res = preg_replace('#a{3}|b{3}#', '!', $str);
?>
結果、変数には次の値が格納されます:
'! ! abb'
例
この例での検索パターンは次の通りです: 3つの'a'文字または1つ以上の'b'文字:
<?php
$str = 'aaa bbb bbbb bbbbb axx';
$res = preg_replace('#a{3}|b+#', '!', $str);
?>
結果、変数には次の値が格納されます:
'! ! ! ! axx'
例
この例での検索パターンは次の通りです: 1つ以上の英字または3つの数字:
<?php
$str = 'a ab abc 1 12 123';
$res = preg_replace('#[a-z]+|\d{3}#', '!', $str);
?>
結果、変数には次の値が格納されます:
'! ! ! 1 12 !'
例
縦棒は正規表現を2つだけでなく、任意の数の部分に分割することができます:
<?php
$str = 'aaa bbb ccc ddd';
$res = preg_replace('#a+|b+|c+#', '!', $str);
?>
結果、変数には次の値が格納されます:
'! ! ! ddd'
例
縦棒が丸括弧内にある場合、'または'の動作はその括弧内でのみ有効です。例として、次のパターンに一致する文字列を検索してみましょう:先頭に1回以上の'a'または'b'があり、その後ろに2つの'x'文字が続く:
<?php
$str = 'axx bxx bbxx exx';
$res = preg_replace('#(a|b+)xx#', '!', $str);
?>
結果、変数には次の値が格納されます:
'! ! ! exx'
実践問題
次の文字列があります:
<?php
$str = 'aeeea aeea aea axa axxa axxxa';
?>
次のパターンに一致する文字列を見つける正規表現を書いてください: 両端に'a'文字があり、その間に任意の回数の'e'文字または任意の回数の'x'文字がある。
次の文字列があります:
<?php
$str = 'aeeea aeea aea axa axxa axxxa';
?>
次のパターンに一致する文字列を見つける正規表現を書いてください: 両端に'a'文字があり、その間に2回の'e'文字または任意の回数の'x'文字がある。