正規表現における文字セットの否定
大括弧の先頭のキャレット ^ を使用して、条件を反転させることができます。つまり、例えばパターン [ab] が文字 'a' または 'b' を検索する場合、パターン [^ab] は 'a' と 'b' を**除く**すべての文字を検索します。
例
この例での検索パターンは次のとおりです:
文字 'x'、その後 'a' ではなく、
'b' でもなく、'c' でもない文字、その後に文字
'z':
<?php
$str = 'xaz xbz xcz xez';
$res = preg_replace('#x[^abc]z#', '!', $str);
?>
結果、変数には次の文字列が保存されます:
'xaz xbz xcz !'
例
この例での検索パターンは次のとおりです:
文字 'x'、その後 小文字のラテン文字**ではなく**、その後文字 'z':
<?php
$str = 'xaz xbz x1z xCz';
$res = preg_replace('#x[^a-z]z#', '!', $str);
?>
結果、変数には次の文字列が保存されます:
'xaz xbz ! !'
練習問題
次のパターンに一致する文字列を見つける正規表現を書いてください:
数字 '1'、その後 'e' でも 'x' でもない文字、数字 '2'。
次のパターンに一致する文字列を見つける正規表現を書いてください:
文字 'x'、その後 2 から 7 までの数字**ではなく**、文字 'z'。
次のパターンに一致する文字列を見つける正規表現を書いてください:
文字 'x'、その後 大文字のラテン文字**ではなく** 1 回以上、文字 'z'。
次のパターンに一致する文字列を見つける正規表現を書いてください:
文字 'x'、その後 大文字でも小文字のラテン文字でもなく、かつ 1 から 5 までの数字でもない文字が 1 回以上、文字 'z'。