正規表現を使いこなす上で必須になってくる基礎知識についてまとめました。勉強にお役立てください。
基礎知識
・デリミタ:最初と末尾の/
・正規表現の基本構文は以下
/正規表現パターン/修飾子
独自の機能を持つ記号:メタ文字
・ワイルドカード(ピリオド、ドット)
・= 一文字分を何でもカバー
・[] 角かっこは一文字分の選択肢を設定
・ハイフン・・・角カッコの中で文字数字の範囲を指定する
例)チーム[A-Za-z0-9]
上記の場合、チームに後に続く一文字がローマ字の大文字であっても小文字であっても、どんな数字であっても一致する
例2)[0-9][0-9]
上記では、二桁以上の数値に何でも一致
・キャレット(^)・・・角カッコの中で、直後の対象範囲を逆転させる。角カッコの外では、行頭であることを指定する。
例)[^cd]ash
上記は、cd以外の一文字に一致
※先頭でしか使えない
例2)^ash
・$・・・行末であることを指定する
$と^の併用もできる。その場合は、行全体が指定の文字単独でなければ一致しない
・\ (バックスラッシュ)・・・直後のメタ文字を単なる文字として扱う(エスケープする)
\n・・・改行
\t・・・タブ
\d = [0-9] = 0から9までの数字
\D = [^0-9] = 上記以外全て
\w = [a-zA-Z0-9] = アルファベットと数字全て
\W = [^a-zA-Z0-9] = 上記以外全て
\s = [ \f \n \r \t] = スペース、改行、改ページ、タブ
\S = [^ \f \n \r \t] = 上記以外全て
\b = スペースや改行などの区切り
\B = 上記以外の区切り
修飾子
・s(single line):改行をワイルドカードの対象に含める
・I:大文字と小文字の区別をなくす
・g:可能な限り多くを検出する
・m:複数行を対象にする
・u:unicodeを正規表現パターンに含める
※正規表現はスペースも対象にする
数量詞:パターンの直後に記述する
(アスタリスク) = 0回以上
+ = 1回以上
? = 0回か1回
例)flavour
上記の場合は、uがなくても、10個以上あっても一致
回数の指定
・{n} = n回の繰り返し
例) riki{4}
上記は、iの4回未満はヒットしない
・{n,} = n回以上の繰り返し
・{0,1} = 繰り返しの下限と上限の設定
数量詞のデフォルト
最長一致 = 可能な限り範囲を広げる
最短一致 = 可能な限り範囲を狭くする = 数量詞の直後に?を記述
丸括弧とパイプ
・() = 正規表現パターンをグループ化する
例) (xyz){2}
・| = 選択肢を設ける
例)red|white
例2) (red|white|black) team
例2は、red team、white team、black teamに一致
※([])は使える。しかし、[()]はグループ化機能はなくなり単なる文字として扱われる。
※()はネストすることもできる。ネストとは二重にしたりできるということ。
キャプチャ
\ + 1~9の数字で、既出の丸括弧を参照する
例) (ab)(cd)\1
上記はabcdabと一致
・キャプチャはhtmlタグとかと一致させるときとかにも便利
・vscodeとかのedit→replaceで正規表現を使うときは、\ + 1~9のところを$ + 1~9にする必要がある。若干書き方が変わるってこと。
・キャプチャの機能をなくすには、(?:〜〜〜)のように、()の先頭に?と:をつける
アサーション
後読み = 直前またはすぐ左を調べる
先読み = 直後またはすぐ右を調べる
肯定先読み = 直後に「ある」かどうかを調べる
否定先読み = 直後に「ない」かどうかを調べる
先読みの例)
・/太郎(?=さん)/
上記の場合、太郎さんならば一致
否定先読みの例)
・/太郎(?!さん)/
肯定後読みの例)
・/(?<=山田)太郎
上記のように、後読みの場合は左向きの不等号が必要。
まとめ
これだけ覚えておけばあとは応用を少し勉強するだけで正規表現は使いこなせます。
参考程度に。