正規表現で指定したパターン以外のパターンにマッチする式を紹介します。
概要
正規表現で全体のパターンの中の一部のパターンにマッチした場合以外をマッチさせたい場合があります。
単体の文字の場合は ^ を利用しますが、パターンを否定したい場合、パターン以外のものにマッチさせたい場合には、「否定後読み」を利用すると実装できます。
否定後読みの書式
?<!
を記述します。
通常は、ブロックの後に式が続くため、次の形式となります。
否定先読みとの違い
否定先読みは、(?!...)
ブロックの手前に式があり、手前の式にマッチするが、否定先読みのパターンにマッチしない場合にマッチと判定されます。
例1
abc123
以外のパターンにマッチさせたいです。
この場合、以下の正規表現式を利用します。
ヒント
否定部分が1文字の場合、
a123
b123
c123
以外にマッチさせる場合には、
^
演算子を利用できます。詳しくは
こちらの記事を参照して下さい。
実行結果
置換文字列を"OK"とした場合、次の結果になります。
文字列 | マッチするか | 置換後の文字列 |
a123 | 〇 | aOK |
b123 | 〇 | bOK |
c123 | 〇 | cOK |
abc123 | × | abc123 |
abc1234 | × | abc1234 |
Xabc1234 | × | Xabc1234 |
aba123 | 〇 | abaOK |
XYZabc123PQR | × | XYZabc123PQR |
例2
abc123
xyz123
以外のパターンにマッチさせたいです。
この場合、以下の正規表現式を利用します。複数のパターンのORをとる場合は
|
演算子を利用します。
実行結果
置換文字列を"OK"とした場合、次の結果になります。
文字列 | マッチするか | 置換後の文字列 |
a123 | 〇 | aOK |
c123 | 〇 | cOK |
abc123 | × | abc123 |
Xabc1234 | × | Xabc1234 |
aba123 | 〇 | abaOK |
XYZabc123PQR | × | XYZabc123PQR |
x123 | 〇 | xOK |
z123 | 〇 | zOK |
xyz123 | × | xyz123 |
Axyz1239 | × | Axyz1239 |
xz123 | 〇 | xzOK |
xyz987 | × | xyz987 |
例3
ponta
以外の
*ta
にマッチする正規表現式は次の通りです。
実行結果
置換文字列を"OK"とした場合、次の結果になります。
文字列 | マッチするか | 置換後の文字列 |
penta | 〇 | penOK |
ponta | × | ponta |
pnta | 〇 | pnOK |
printa | 〇 | prinOK |
poronta | 〇 | poronOK |
zponta | × | zponta |
3ponta | × | 3ponta |
anapontap | × | anapontap |
petita | 〇 | petiOK |
ota | 〇 | oOK |
著者
iPentecの企画・分析担当。口が悪いのでなるべく寡黙でありたいと思っている。が、ついついしゃべってしまい、毎回墓穴を掘っている。
最終更新日: 2024-01-23
作成日: 2022-05-05