正規表現とは、文字列内で文字の組み合わせを照合するために用いられるパターンです。
参照:正規表現
例えば携帯電話の番号
090-1234-5678
080-2011-0702
etc…
3桁の数字-4桁の数字-4桁の数字
正規表現を使うと、1つの正規表現で全ての電話番号が検索ができる。
\d{3}-\d{4}-\d{4}
※正規表現も複雑過ぎるのを書かれるとメンテナンス出来なくなるので、書いた人は自己満足出来るけど、後の人や2ヶ月後の自分のことを気にしないとね。
下記の特殊文字をメタ文字といいます。
メタ文字を単なる普通の文字として検索したい場合は、メタ文字の前に「\」を付加します。
. ^ $ [ ] * + ? | ( )
良く使われる文字クラスには省略記法が存在します。
これらの「空白」「数字」などは ASCII の範囲の文字のみを対象としています。 いわゆる「全角アルファベット」「全角空白」「全角数字」などは ここの空白、数字、には含まれません。
「.*」 … なんでもいい文字の連続(最長)
正規表現 JR.*駅
対象文字 JR静岡駅から浜松駅まで
※可能な限り合致するまでヒットする
「.*?」 … なんでもいい文字の連続(最短)
正規表現 JR.*?駅
対象文字 JR静岡駅から浜松駅まで
※可能な限り少ない回数でヒットする
正規表現を使って置換をする場合、正規表現でマッチした内容をそのまま使用したい場合がある、その場合に後方参照を使用する。
後方参照は、正規表現にて括弧で括られた分を「$」の後の数値を付けて「$1」などと記述する。
対象文字列 1234567890 正規表現 (\d\d\d\d)(\d\d)(\d\d\d\d) 置換文字列 $3-$1-$2 $1 = 1234 $2 = 56 $3 = 7890 結果 7890-1234-56
Userを含まない行を抽出する。(?!.*対象文字列)を使う。
正規表現:文字列を「含まない」否定の表現まとめ
-- 複数行マッチのオプションとして「m」を付けている。 /^(?!.*User).*$/gm net use aaa /User aaaaa ヒットしない net use aaa xxxxx bbbbb ヒットする
不明な場合、-(ハイフン)を入力、月/日 の入力形式を少し厳密に行う
-$|^(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])$
参照:日付および時刻の正規表現
-$|(?<![0-9])(2\/([1-9]|[12][0-9])$|([469]|11)\/([1-9]|[12][0-9]|30)$|([13578]|10|12)\/([1-9]|[12][0-9]|3[01])$)
参照:正規表現で日付を検索