正規表現
リテラル
メタ文字以外の通常の検索文字列
メタ文字の前に/でエスケープすることでリテラルとして扱うことができる
メタ文字
/ エスケープ
. ワイルドカード(改行以外
文字種
基本的に大文字で否定になる
\d digit 0-9
\D \d以外
\w words a-z, A-Z, 0-9, _
\W \w以外
\s space, tab, return
\S \s以外
量指定子
{n} n個
{min, max} min以上max未満
{min,} min以上
? {0, 1}
+ {1,} 1個以上
* {0,} 0個以上
量指定子はデフォルトでは最長マッチだが、量指定子のあとに?をつけると最短マッチになる
アンカー
^ 行の先頭
$ 行の末尾
\b 単語の境界(boundary) \b単語\b
選択子
| or
abc|123 = abc or 123
example\.com|\.netという記述はexample.com or .netとなるので注意。
すべて記述する → example\.com|example\.net
グループ化 → example\.(com|net)
文字クラス
[abc] 大括弧の中にある文字セットのいずれかにマッチ
[^abc] 否定形。大括弧の中にある文字セット以外の文字にマッチ
[A-C] 範囲指定(文字コード順)、逆順は不可
文字クラスのエスケープ
.はリテラルとして解釈される(ワイルドカード文字にはならない)
^は先頭以外ではリテラルとして解釈される
-は文中以外ではリテラルとして解釈される
改行とタブ
\t タブ
\r\n 改行(win)
\r 改行(v9までのmacOS)
\n 改行(Unix, v10以降のmacOS)
\r\n|\r|\nですべてのOSの改行に対応できる
キャプチャ
()はグループ化と同時にキャプチャになる。
(abc)(def)は$1, $2でそれぞれ取り出せる
(?:)でグループ化だけになり、キャプチャされない
後方参照
(abc)/1 はabcabcにマッチする
$による参照と違い、正規表現中に取り出すことができる。
先読み/後読み
パターン
()内を含めたくないときに使う
先読み、後読みが紛らわしい
foo(?=bar)が基本(後ろにbarがあるfoo)
(?<=bar)foo: 前にbarがあるfoo
前にbarがあることを表現したいときに<を加える
=は肯定形で!が否定形
(?=pattern) 肯定的先読み
foo(?=bar): 直後にbarがあるfoo(barは含まない)に一致
(?!pattern) 否定的先読み
foo(?!bar): 直後にbarがないfoo(barは含まない)に一致
(?<=pattern)肯定的後読み
(?<=bar)foo: 直前に barがあるfoo(barは含まない)に一致
(?<!pattern) 否定的後読み
(?<!bar)foo: 直前にbarがないfoo(barは含まない)に一致
複数指定するときは(?!ABC|DEF)