PHPの正規表現における波括弧

演算子 +, *, ? は便利ですが、 特定の繰り返し回数を指定することはできません。 この場合、演算子 {} が役に立ちます。

使い方は次の通りです: {5} - 5回の繰り返し、{2,5} - 2回から5回まで繰り返し (両端含む)、{2,} - 2回以上繰り返し。

例

この例での検索パターンは次の通りです: 文字 'x'、文字 'a' が1回 または2回、文字 'x':

php<?php
  $str = 'xx xax xaax xaaax';
  $res = preg_replace('#xa{1,2}x#', '!', $str);
?>

結果、変数には次の文字列が格納されます:

php'xx ! ! xaaax'

例

この例での検索パターンは次の通りです: 文字 'x'、文字 'a' が2回 以上、文字 'x':

php<?php
  $str = 'xx xax xaax xaaax';
  $res = preg_replace('#xa{2,}x#', '!', $str);
?>

結果、変数には次の文字列が格納されます:

php'xx xax ! !'

例

この例での検索パターンは次の通りです: 文字 'x'、文字 'a' が3回、 文字 'x':

php<?php
  $str = 'xx xax xaax xaaax';
  $res = preg_replace('#xa{3}x#', '!', $str);
?>

結果、変数には次の文字列が格納されます:

php'xx xax xaax !'

例

この例での検索パターンは次の通りです: 文字 'a' が10回:

php<?php
  $str = 'aaa aaaaaaaaaa aaa';
  $res = preg_replace('#a{10}#', '!', $str);
?>

結果、変数には次の文字列が格納されます:

php'aaa ! aaa'

例

この例で、コードの作成者が意図したパターンは: 文字 'x'、文字 'a' が3回 以下、文字 'x'、 でしたが、残念ながら - {,3} - この書き方は 機能しません。明示的に指定する必要があります:

php<?php
  $str = 'xx xax xaax xaaax';
  $res = preg_replace('#xa{1,3}x#', '!', $str);
?>

結果、変数には次の文字列が格納されます:

php'xx ! ! !'

例

ゼロも指定可能です:

php<?php
  $str = 'xx xax xaax xaaax';
  $res = preg_replace('#xa{0,3}x#', '!', $str);
?>

結果、変数には次の文字列が格納されます:

php'! ! ! !'

実践問題

Задание 1

次の文字列があります:

php<?php
  $str = 'aa aba abba abbba abbbba abbbbba';
?>

文字列 'abba', 'abbba', 'abbbba' のみを検索する正規表現を 書いてください。

Задание 2

次の文字列があります:

php<?php
  $str = 'aa aba abba abbba abbbba abbbbba';
?>

'aba' 形式の文字列のうち、 'b' が3回以下(3回を含む)現れるものを 検索する正規表現を書いてください。

Задание 3

次の文字列があります:

php<?php
  $str = 'aa aba abba abbba abbbba abbbbba';
?>

'aba' 形式の文字列のうち、 'b' が4回以上(4回を含む)現れるものを 検索する正規表現を書いてください。