^(文字)
の正規表現式では、^
は行頭を表す記号になります。
正規表現や正規表現式内での否定の表現の記述の紹介です。
指定した文字以外の文字に一致させる場合には次の書式を利用します。
[^文字]
(a以外の文字)123
のパターン(k123
z123
など)に一致する表現は以下になります。
[^a]123
詳しくはこちらの記事を参照してください。
^(文字)
の正規表現式では、^
は行頭を表す記号になります。
特定のパターンを除くパターンに一致させる場合には否定先読みと呼ばれる次の書式を利用します。
(?!パターン)
abc123
以外のabc
並びのパターン(abc999
abc456
)にマッチさせる表現は以下になります。
abc(!123)
否定先読みの詳細はこちらの記事を参照してください。
特定のパターンを除くパターンに一致させる場合には否定後読みと呼ばれる次の書式を利用します。
(?<!パターン)
abc123
以外の123
並びのパターン(bac123
xxz123
pppp123
)にマッチさせる表現は以下になります。
(?<!abc)123
否定後読みの詳細はこちらの記事を参照してください。
行の開始を否定する場合には、^
と [^..]
(?!...)
を組み合わせます。
(文字)で始まる文字列を否定できます。
^[^文字]
"k"以外で始まる文字列に一致します。
^[^k].*
(文字列)で始まる文字列を否定できます。
^(?!文字列)
"abc"で始まる文字列以外の文字列にマッチします。
^(?!abc).*
冒頭の"OK"以外で始まる文字列にマッチする式は以下となります。
^(?!OK).*
行の終了を否定する場合には、$
と [^..]
(?<!...)
を組み合わせます。
(文字)で終わる文字列を否定できます。
[^文字]$
3以外で終わる文字列に一致します。
.*[^3]$
(文字列)で終わる文字列を否定できます。
(?<!文字列)$
pen以外で終わる文字列に一致します。
.*(?<!pen)$
ジョンのITコンサルオフィスは、夕暮れ時の東京の喧騒から一歩離れたビルの一角にあった。
窓の外では、ネオンがちらつき始め、遠くの車のクラクションが微かに響く。
オフィスの中は、モニターの青白い光と、ジョンが愛用するコーヒーマシンのガタガタという音が支配していた。
デスクには、コードが書き殴られたノートと、飲みかけのエスプレッソのカップが雑然と並んでいる。
ジョンは椅子に深く腰かけ、キーボードを叩く手を止めて、向かいの席に座るジョナサンに目をやった。
ジョナサンは、なぜか手に持ったペンをくるくる回しながら、どこか浮ついた笑みを浮かべている。
「なあ、ジョナサン、正規表現の否定って知ってるか?」
ジョンが口を開いた。声には、技術トークに突入する前のワクワク感が滲む。
「指定した文字や文字列以外に一致する正規表現さ。たとえば、[^a-z]って書けば、アルファベット以外の文字にマッチする。
シンプルだけど、めっちゃ強力なんだよ。ログ解析でエラーコードだけ抜き出したいときとか、特定のフォーマットを避けたいときにバッチリだ。」
彼はカップを持ち上げ、一口飲むと、満足げに頷いた。
ジョナサンはペンを止めて、椅子の背もたれに体を預けた。オフィスの蛍光灯が彼のメガネに反射し、キラリと光る。
「へえ、面白そうだな!つまり、俺が書いたコードのバグ以外を全部拾うみたいな?[^バグ]って感じ?」
彼の口元にいたずらっぽい笑みが広がる。ジョンは一瞬、眉をひそめたが、すぐに吹き出した。
「お前のコードのバグは正規表現でどうこうできるレベルじゃねえよ。[^バグ]どころか、宇宙全体を否定しても残る例外だろ!」
オフィスに二人の笑い声が響き、コーヒーマシンがタイミングよくガタンと音を立てた。窓の外では、夜の帳が下り、ネオンがさらに鮮やかに輝き始めていた。