正規表現で指定した文字以外の文字に一致する式

ペムノン
質問: 指定した文字以外で一致させたい
テキストのログがあります。通常は先頭に + - のマーカーがついています。先頭に"+","-"のマーカーが無い不正なログを抽出したいのですが、どんな正規表現を書けばよいですか?

正規表現で指定した文字以外に一致する正規表現の記述について紹介します。

正規表現式

指定した文字以外にマッチさせる場合は次の記述を利用します。

1文字のみを判定する場合には以下の式を利用します。

[^文字]


複数文字を判定する場合には以下の式を利用します。

(?!文字列)...


文字列が複数パターンの場合には以下の式を利用します。

(?!文字列1|文字列2|文字列3)...

例1: [^abc]123 の場合

次の正規表現式では a123,b123,c123 以外の *123 の文字にマッチします。

[^abc]123
結果メモ
f123 True (マッチする)
aF123 True (マッチする) F123部分でマッチ
z123 True (マッチする)
0123456 True (マッチする) 0123部分でマッチ
1234 False (マッチしない) 手前に文字が無いのでマッチしない
b123 False (マッチしない)
Fa123 False (マッチしない)
abc123 False (マッチしない)
a123 False (マッチしない)
b123 False (マッチしない)
c123 False (マッチしない)
pen False (マッチしない)

例2: (?!abc)...123 の場合

次の正規表現式では abc123 以外の ***123 の文字にマッチします。

(?!abc)...123
結果メモ
123 False (マッチしない)
123abc False (マッチしない)
abc123 False (マッチしない)
xyz123 True (マッチする) "xyz123" でマッチ
abc12345 False (マッチしない)
bbc12345 True (マッチする) "bbc123" でマッチ
kkr33256 False (マッチしない)
ZZabc12345 False (マッチしない)
VYAcca12345 True (マッチする) "cca123" でマッチ

例3 : 特定の先頭文字を除外

^[^+\-].*$
結果メモ
+OK False (マッチしない)
-NG False (マッチしない)
+BUSY False (マッチしない)
SERVER ERR True (マッチする) 行全体にマッチする
- False (マッチしない)
+ False (マッチしない)
HOGE True (マッチする) 行全体にマッチする

例4 : 先頭が OK, NG 以外の行を抽出

次の正規表現式では OK NG 以外で始まる文字にマッチします。

^(?!OK|NG).*$
結果メモ
OK 200 False (マッチしない)
NG 401 False (マッチしない)
OK 201 False (マッチしない)
NG 403 False (マッチしない)
ERR True (マッチする) 行全体にマッチするので "ERR" にマッチ
OK False (マッチしない)
ERR 2001 True (マッチする) 行全体にマッチするので "ERR 2001" にマッチ

例5 : [^ ]を複数組み合わせる例

(p以外)(o以外)(n以外)ta の文字列にマッチします。

[^p][^o][^n]ta
結果メモ
agfta True (マッチする)
vyzta True (マッチする)
penta False (マッチしない)
ponta False (マッチしない)
ponmo False (マッチしない)
xoxta False (マッチしない)
gafantax False (マッチしない) "fanta" の3文字目のnがあるため
gafaetax True (マッチする) "faeta" にマッチ

例6 : 拡張子の例

.txt 以外のファイル名にマッチします。

^.+\.(?!txt$)[^.]+$
結果メモ
abcdef False (マッチしない)
aaa.txt False (マッチしない)
bbb.pdf True (マッチする)
ccc.bmp True (マッチする)
eee.wav True (マッチする)
データ.txt False (マッチしない)
画像.bmp True (マッチする)


.txt .pdf 以外のファイル名にマッチします。

^.+\.(?!txt$|pdf$)[^.]+$
結果メモ
abcdef False (マッチしない)
aaa.txt False (マッチしない)
bbb.pdf False (マッチしない)
ccc.bmp True (マッチする)
eee.wav True (マッチする)
データ.txt False (マッチしない)
画像.bmp True (マッチする)
補足
[^.]+$ が無い場合、拡張子部分までがマッチ範囲に入らない点に注意が必要です。

例7 : 特定の HTML タグを除外

<script>以外のタグにマッチします。

<(?!script)[a-z]+>
結果メモ
<h1>aaa</h1> True (マッチする) "<h1>" にマッチ
<script>kkk</script> False (マッチしない)
<p>aaa</p> True (マッチする) "<p>" にマッチ
<div>aaa</div> True (マッチする) "<div>" にマッチ


AuthorPortraitAlt
著者
iPentecの企画・分析担当。口が悪いのでなるべく寡黙でありたいと思っている。が、ついついしゃべってしまい、毎回墓穴を掘っている。
作成日: 2012-03-30
改訂日: 2025-05-05
Copyright © 1995–2025 iPentec all rights reserverd.