PHPの正規表現における波括弧
演算子 +, *, ? は便利ですが、
特定の繰り返し回数を指定することはできません。
この場合、演算子 {} が役に立ちます。
使い方は次の通りです: {5}
- 5回の繰り返し、{2,5} - 2回から5回まで繰り返し
(両端含む)、{2,}
- 2回以上繰り返し。
例
この例での検索パターンは次の通りです:
文字 'x'、文字 'a' が1回
または2回、文字 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{1,2}x#', '!', $str);
?>
結果、変数には次の文字列が格納されます:
'xx ! ! xaaax'
例
この例での検索パターンは次の通りです:
文字 'x'、文字 'a' が2回
以上、文字 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{2,}x#', '!', $str);
?>
結果、変数には次の文字列が格納されます:
'xx xax ! !'
例
この例での検索パターンは次の通りです:
文字 'x'、文字 'a' が3回、
文字 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{3}x#', '!', $str);
?>
結果、変数には次の文字列が格納されます:
'xx xax xaax !'
例
この例での検索パターンは次の通りです:
文字 'a' が10回:
<?php
$str = 'aaa aaaaaaaaaa aaa';
$res = preg_replace('#a{10}#', '!', $str);
?>
結果、変数には次の文字列が格納されます:
'aaa ! aaa'
例
この例で、コードの作成者が意図したパターンは:
文字 'x'、文字 'a' が3回
以下、文字 'x'、
でしたが、残念ながら - {,3} - この書き方は
機能しません。明示的に指定する必要があります:
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{1,3}x#', '!', $str);
?>
結果、変数には次の文字列が格納されます:
'xx ! ! !'
例
ゼロも指定可能です:
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{0,3}x#', '!', $str);
?>
結果、変数には次の文字列が格納されます:
'! ! ! !'
実践問題
次の文字列があります:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
文字列 'abba', 'abbba',
'abbbba' のみを検索する正規表現を
書いてください。
次の文字列があります:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
'aba' 形式の文字列のうち、
'b' が3回以下(3回を含む)現れるものを
検索する正規表現を書いてください。
次の文字列があります:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
'aba' 形式の文字列のうち、
'b' が4回以上(4回を含む)現れるものを
検索する正規表現を書いてください。