正規表現について


正規表現

grepやfindコマンド使えるようになるためには正規表現(検索したい条件の書き方)も理解していないといけない。正規表現のパターンには、文字を指定する、文字数を指定する、指定した文字の位置を指定するがある。

文字を指定

.を単体で使うと、全ての文字って意味。しかし[]の中に入るとただの文字として認識されてしまう。

[]の中に指定したい文字をいれる→複数いれるとそのうちのどれか一つってこと。また[a-z]にするとaからzの内って意味になる。また~とバックスラッシュがついている場合はa-zなどを略した表現をしている。

[^ ]と頭に^がつくとの指定した文字以外の文字を持つやつってことになる

略語

\dは[0-9]
\sは改行文字を含んだ空白文字
\wは[0-9a-zA-Z_]

また\d{2}にすると\d\dという意味になる。

繰り返し指定

指定した領域の後ろにつけて指示をする

?なら0か1回繰り返す
+なら1回以上繰り返す
*なら0回以上繰り返す
+?なら1回以上繰り返す
*?なら0回以上繰り返す
{min, max}ならば最低でもmin回数、最高でもmax回数繰り返す

位置指定

^なら頭にはって意味
$ならお尻にはって意味
\Aなら頭、\zならお尻

フラグ(パターンマッチ,置換などに使用される)

パターン/g→これでこのパターン全てに対してという意味になる

パターン/i→これでこのパターンでのマッチ,置換では大文字小文字は無視するおいう意味になる

参考文献は正規表現のフラグ

キャプチャ(置換で使う?)

パターンの中で、()で括った部分が、\$数字に代入されていく、これを置換のパターン設定で使用する。一つ目のカッコは\$1、二つ目のカッコは\$2....という風に代入されていく。この\$数字を使用して置換をうまく行うことができる。

参考文献はマッチした複数の文字列を取得($1, $2, ..)

後方参照

()で囲った内容を、その場で使用する時は一つ目のカッコの内容は\1、二つ目は\2....で使用する。

(? )

(?<=パターン)→パターンの直後のこと

(?=パターン)→パターンの直前のこと

これを利用してその直前、直後の言葉を得る。
参考文献は初心者歓迎!手と目で覚える正規表現入門・その4(最終回)「中級者テクニックをマスターしよう」

その他

|は()内で使い、orという意味、(abc|def)はabcかdefって意味になる

([])+とかをすると、[]の中身が1回以上繰り返されるという意味になる

\をつけると後ろの部分をエスケープする。例えば、-は-という意味になる。

\bは単語の境界、\baaa\bだとaaaという単語だけを取り出し、waaaは取り出さない

参考文献はLinuxで使う正規表現についてまとめました正規表現のポイント