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
$str = 'xax xbx xcx x@x';
$res = preg_replace('#x[a-z]x#', '!', $str);
?>
結果、変数には以下が書き込まれます:
'! ! ! x@x'
例
この例では、検索パターンは次のようになります:
xの間には、'a'から'k'までの任意の文字:
<?php
$str = 'xax xbx xmx x@x';
$res = preg_replace('#x[a-k]x#', '!', $str);
?>
結果、変数には以下が書き込まれます:
'! ! xmx x@x'
例
この例では、検索パターンは次のようになります:
xの間には、'A'から'Z'までの任意の文字:
<?php
$str = 'xax xBx xcx x@x';
$res = preg_replace('#x[A-Z]x#', '!', $str);
?>
結果、変数には以下が書き込まれます:
'xax ! xcx x@x'
例
この例では、検索パターンは次のようになります:
xの間には、0から9までの任意の数字:
<?php
$str = 'xax x1x x3x x5x x@x';
$res = preg_replace('#x[0-9]x#', '!', $str);
?>
結果、変数には以下が書き込まれます:
'xax ! ! ! x@x'
例
この例では、検索パターンは次のようになります:
xの間には、3から7までの任意の数字:
<?php
$str = 'xax x1x x3x x5x x@x';
$res = preg_replace('#x[3-7]x#', '!', $str);
?>
結果、変数には以下が書き込まれます:
'xax x1x ! ! x@x'
例
この例では、検索パターンは次のようになります:
xの間には、'a'から'z'までの任意の文字、または1から9までの数字:
<?php
$str = 'xax x1x x3x x5x x@x';
$res = preg_replace('#x[a-z1-9]x#', '!', $str);
?>
結果、変数には以下が書き込まれます:
'! ! ! ! x@x'
例
この例では、検索パターンは次のようになります:
xの間には、'a'から'z'までの任意の文字、または'A'から'Z'までの任意の文字:
<?php
$str = 'xax xBx xcx x5x x@x';
$res = preg_replace('#x[a-zA-Z]x#', '!', $str);
?>
結果、変数には以下が書き込まれます:
'! ! ! x5x x@x'
例
この例では、検索パターンは次のようになります:
xの間には、'a'から'z'までの任意の文字、または数字1, 2:
<?php
$str = 'xax xbx x1x x2x x3x';
$res = preg_replace('#x[a-z12]x#', '!', $str);
?>
結果、変数には以下が書き込まれます:
'! ! ! ! x3x'
例
この例では、検索パターンは次のようになります:
xの間には、'a'から'z'までの文字が1つ以上:
<?php
$str = 'xx xabesx xaadx x123x xa3x';
$res = preg_replace('#x[a-z]+x#', '!', $str);
?>
結果、変数には以下が書き込まれます:
'xx ! ! ! x123x xa3x'
例
文字数がゼロでも良いようにしてみましょう:
<?php
$str = 'xx xabesx xaadx x123x xa3x';
$res = preg_replace('#x[a-z]*x#', '!', $str);
?>
結果、変数には以下が書き込まれます:
'! ! ! x123x xa3x'
実践問題
次の文字列が与えられています:
<?php
$str = 'aba aea aca aza axa';
?>
次のパターンに一致する正規表現を記述してください: 両端に文字'a'があり、
その間に文字'b'、'e'、または'x'がある。
次の文字列が与えられています:
<?php
$str = 'a1a a3a a7a a9a aba';
?>
次のパターンに一致する正規表現を記述してください: 両端に文字'a'があり、
その間に3から6までの数字がある。
次の文字列が与えられています:
<?php
$str = 'aba aea afa aha aga';
?>
次のパターンに一致する正規表現を記述してください: 両端に文字'a'があり、
その間にaからgまでの文字がある。
次の文字列が与えられています:
<?php
$str = 'aba aea afa aha aga';
?>
次のパターンに一致する正規表現を記述してください: 両端に文字'a'があり、
その間にaからfまでおよびjからzまでの文字がある。
次の文字列が与えられています:
<?php
$str = 'aAa aea aEa aJa a3a';
?>
次のパターンに一致する正規表現を記述してください: 両端に文字'a'があり、
その間にaからfまでおよびAからDまでの文字がある。
次の文字列が与えられています:
<?php
$str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>
次のパターンに一致する正規表現を記述してください: 両端に文字'a'があり、
その間に小文字のラテン文字がある。他の部分には影響を与えないようにしてください。
次の文字列が与えられています:
<?php
$str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>
次のパターンに一致する正規表現を記述してください: 両端に文字'a'があり、
その間に小文字および大文字のラテン文字がある。他の部分には影響を与えないようにしてください。
次の文字列が与えられています:
<?php
$str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>
次のパターンに一致する正規表現を記述してください: 両端に文字'a'があり、
その間に小文字のラテン文字および数字がある。他の部分には影響を与えないようにしてください。