PHP正規表現における文字セット

文字グループ \d と \w は あまり柔軟ではありません。数字以外のすべての文字を見つけるというような 単純なタスクでさえ、これらでは解決できません。そのようなタスクには、 OR演算を表す角括弧を使用する必要があります。

角括弧は、その中にリストされた任意の1文字を置き換えます。 例えば、このように: #x[abc]x# - 私たちは、 両端に文字xが位置し、その間に1文字 - 'a'、または'b'、または'c' がなければならないと指定しています。

角括弧の後に繰り返し演算子を記述できます。 例えば、このように: #x[abc]+x# - 私たちは、xの間には任意の数の 'a'、'b'、'c' の文字が任意の組み合わせで存在できると指定しています。

文字を列挙するだけでなく、ハイフンで区切られた2つの文字の間の 文字グループを作成することもできます。 例えば、このように: #[a-d]# - 'a'から'd'までのすべての文字を 取得します。

例を見てみましょう。

例

この例では、検索パターンは次のようになります: xの間には、'a'から'z'までの任意の文字:

php<?php
  $str = 'xax xbx xcx x@x';
  $res = preg_replace('#x[a-z]x#', '!', $str);
?>

結果、変数には以下が書き込まれます:

php'! ! ! x@x'

例

この例では、検索パターンは次のようになります: xの間には、'a'から'k'までの任意の文字:

php<?php
  $str = 'xax xbx xmx x@x';
  $res = preg_replace('#x[a-k]x#', '!', $str);
?>

結果、変数には以下が書き込まれます:

php'! ! xmx x@x'

例

この例では、検索パターンは次のようになります: xの間には、'A'から'Z'までの任意の文字:

php<?php
  $str = 'xax xBx xcx x@x';
  $res = preg_replace('#x[A-Z]x#', '!', $str);
?>

結果、変数には以下が書き込まれます:

php'xax ! xcx x@x'

例

この例では、検索パターンは次のようになります: xの間には、0から9までの任意の数字:

php<?php
  $str = 'xax x1x x3x x5x x@x';
  $res = preg_replace('#x[0-9]x#', '!', $str);
?>

結果、変数には以下が書き込まれます:

php'xax ! ! ! x@x'

例

この例では、検索パターンは次のようになります: xの間には、3から7までの任意の数字:

php<?php
  $str = 'xax x1x x3x x5x x@x';
  $res = preg_replace('#x[3-7]x#', '!', $str);
?>

結果、変数には以下が書き込まれます:

php'xax x1x ! ! x@x'

例

この例では、検索パターンは次のようになります: xの間には、'a'から'z'までの任意の文字、または1から9までの数字:

php<?php
  $str = 'xax x1x x3x x5x x@x';
  $res = preg_replace('#x[a-z1-9]x#', '!', $str);
?>

結果、変数には以下が書き込まれます:

php'! ! ! ! x@x'

例

この例では、検索パターンは次のようになります: xの間には、'a'から'z'までの任意の文字、または'A'から'Z'までの任意の文字:

php<?php
  $str = 'xax xBx xcx x5x x@x';
  $res = preg_replace('#x[a-zA-Z]x#', '!', $str);
?>

結果、変数には以下が書き込まれます:

php'! ! ! x5x x@x'

例

この例では、検索パターンは次のようになります: xの間には、'a'から'z'までの任意の文字、または数字1, 2:

php<?php
  $str = 'xax xbx x1x x2x x3x';
  $res = preg_replace('#x[a-z12]x#', '!', $str);
?>

結果、変数には以下が書き込まれます:

php'! ! ! ! x3x'

例

この例では、検索パターンは次のようになります: xの間には、'a'から'z'までの文字が1つ以上:

php<?php
  $str = 'xx xabesx xaadx x123x xa3x';
  $res = preg_replace('#x[a-z]+x#', '!', $str);
?>

結果、変数には以下が書き込まれます:

php'xx ! ! ! x123x xa3x'

例

文字数がゼロでも良いようにしてみましょう:

php<?php
  $str = 'xx xabesx xaadx x123x xa3x';
  $res = preg_replace('#x[a-z]*x#', '!', $str);
?>

結果、変数には以下が書き込まれます:

php'! ! ! x123x xa3x'

実践問題

Задание 1

次の文字列が与えられています:

php<?php
  $str = 'aba aea aca aza axa';
?>

次のパターンに一致する正規表現を記述してください: 両端に文字'a'があり、 その間に文字'b'、'e'、または'x'がある。

Задание 2

次の文字列が与えられています:

php<?php
  $str = 'a1a a3a a7a a9a aba';
?>

次のパターンに一致する正規表現を記述してください: 両端に文字'a'があり、 その間に3から6までの数字がある。

Задание 3

次の文字列が与えられています:

php<?php
  $str = 'aba aea afa aha aga';
?>

次のパターンに一致する正規表現を記述してください: 両端に文字'a'があり、 その間にaからgまでの文字がある。

Задание 4

次の文字列が与えられています:

php<?php
  $str = 'aba aea afa aha aga';
?>

次のパターンに一致する正規表現を記述してください: 両端に文字'a'があり、 その間にaからfまでおよびjからzまでの文字がある。

Задание 5

次の文字列が与えられています:

php<?php
  $str = 'aAa aea aEa aJa a3a';
?>

次のパターンに一致する正規表現を記述してください: 両端に文字'a'があり、 その間にaからfまでおよびAからDまでの文字がある。

Задание 6

次の文字列が与えられています:

php<?php
  $str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>

次のパターンに一致する正規表現を記述してください: 両端に文字'a'があり、 その間に小文字のラテン文字がある。他の部分には影響を与えないようにしてください。

Задание 7

次の文字列が与えられています:

php<?php
  $str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>

次のパターンに一致する正規表現を記述してください: 両端に文字'a'があり、 その間に小文字および大文字のラテン文字がある。他の部分には影響を与えないようにしてください。

Задание 8

次の文字列が与えられています:

php<?php
  $str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>

次のパターンに一致する正規表現を記述してください: 両端に文字'a'があり、 その間に小文字のラテン文字および数字がある。他の部分には影響を与えないようにしてください。