自分がw思い出しやすいように、できるだけ体系的にまとめていく
目次(クリックでジャンプ)
基本正規表現
1文字
「x」~特定の1文字
「x」~「x」にマッチ
「[…]」~カッコ内の1文字にマッチ
一文字ずつ指定
「[abc]」~「a」か「b」か「c」にマッチ
「c[au]t」~「cat」「cut」にマッチして「cot」「ct」「coat」にはマッチせず
範囲で指定
「[a-c]」~「a」「b」「c」にマッチ
「a-zA-Z_0-9」~半角英数字とアンダーバー
「」~半角文字
「」~全角文字
複合指定
「[a-cxy]」~「a」「b」「c」「x」「y」にマッチ
「[^…]」~カッコ内に含まれない1文字にマッチ
「.」~任意の1文字を表す
「c.t」~「cut」「cat」にマッチして「ct」「coat」にはマッチせず
改行を超えての検索はできない
「[sS]」~改行を含む全ての文字1文字
改行のある文書の処理で「.」の代わりに
文字群
「xyz」~特定の文字群にマッチ
「…|…」~どちらかにマッチ
「abc|xyz」~「abc」か「xyz」にマッチ
「.」を使った条件付きマッチ
「c.t」~「cut」「cat」にマッチして「ct」「coat」にはマッチせず
「c..t」~「coat」「cest」にマッチして「cut」「ct」にはマッチせず
「(…)」~グループ化
「今日は(晴れ|雨|曇り)です」~「今日は晴れです」か「今日は雨です」か「今日は曇りです」にマッチ。
グループの参照(本来の正規表現ではない)
最初のグループから”$1″”$2″…として変数のように扱うことが出来る。
検索「今日は(晴れ|雨|曇り)です」→置換え「昨日の天気は$1でした」の場合
「今日は晴れです」→「昨日の天気は晴れでした」
「今日は雨です」→「昨日の天気は雨でした」
「今日は曇りです」→「昨日の天気は曇りでした」
量化子
基本用例
文字やグループの後ろについて、直前の表現が何回現れるのを許されるかを指定する
「?」~直前の表現が0個か1個
「go?gle」は「ggle」か「gogle」にマッチする
語句表現のゆらぎをカバーするのにも便利なようだ
「Windows? ?Vista」~「s」「 (半角スペース)」の有無を吸収する。「Windows Vista」「Window Vista」「WindowsVista」「WindowVista」いずれにもマッチする
「*」~直前の表現が0個以上
「go*gle」は「ggle」や「gogle」「gooogle」にマッチする
「<div[^>]*>」はタグ抜き出しで使用。<div>はもちろん<div class=”hoge”>や<div class=”hoge” style=”color:red;”>など「>」以外の余分な記述があってもマッチする
「+」~直前の表現が1個以上
「go+gle」は「ggle」にはマッチせず、「gogle」「gooogle」にマッチする
表にすると…
ggle | gogle | gooooogle | |||
「go?gle」 | 「o」が0個か1個 | ○ | ○ | ☓ | ☓ |
「go*gle」 | 「o」が0個以上 | ○ | ○ | ○ | ○ |
「go+gle」 | 「o」が1個以上 | ☓ | ○ | ○ | ○ |
使用例
「.*」~0文字以上の任意の文字列
「g.*gle」は「ggle」「gooogle」「gggggle」「gleglegle」にマッチする
「.*oo.*」は「google」「noodle」「boo」「oob」「oo」にマッチする
ワイルドカードの「*」に相当する。
「.+」~1文字以上の任意の文字列
「g.+gle」は「gooogle」「gggggle」や「gleglegle」(最長一致)にマッチするが、「ggle」にはマッチしない
cf「.」~任意の1文字
「g.gle」~「gogle」「gugle」にマッチして「ggle」「google」にはマッチせず
改行を含む場合
「.*」の代わりに「[sS]*」を使う
使用例2~グループ化との組み合わせ
「(…)?」~グループが0個か1個
「Win( XP)?」~「Win XP」「Win」にマッチ
「(…)+」~グループが1個以上
「goo(gle)+」~「google」「googlegle」にマッチ
最長一致と最短一致
最長一致~できるだけ長い文字列を得る
最短一致~できるだけ短い文字列を得る
最短一致にしたい時は量化子の後に「?」を付ける
(例)
<span style=”font-size:12px;”>.*?</span>
<span></span>で囲まれた最小の範囲を検索
その他のメタ文字
とりあえず、収集
「[sS]」~改行を含む全ての文字
複数行を処理する場合に「.」の代わりに使う
「^」~行頭
「^g」~行頭の「g」のみにマッチ
「$」~行末
「gle$」~行末の「gle」のみにマッチ
「|」~または
「d」~半角数字
「b」~単語境界
「.*市b」~任意の文字列に続き「市」で終わる単語。「野田市」「市」にマッチするが「市役所」にはマッチしない。
「d*[02468]b」~偶数。0個以上の半角数字に続く、末尾が偶数の数
エスケープ文字
メタ文字自体を検索したいときは、メタ文字の前に「¥(バックスラッシュ)」を付ける。
記述例
「.」~「.」を検索する
「*」~「*」を検索する
「’」~「’」を検索する
「”」~「”」を検索する
「?」~「?」を検索する
「+」~「+」を検索する
「-」~「-」を検索する
「+」~「+」を検索する
「/」~「/」を検索する
「^」~「^」を検索する
「$」~「$」を検索する
「/」~「/」を検索する
「|」~「|」を検索する
「(」~「(」を検索する
「[」~「[」を検索する
「{」~「{」を検索する
「」~「」を検索する
不要な場合
量化子「?」を続ける場合はエスケープなしでもいけた。
「5-?a」~「5-a」「5a」にマッチ
個数表現・繰り返し
「{n}」~n回の繰り返し
「.{5}」は「…..」と同じで「任意の5文字」の意味
「/d{4}」~4ケタの半角数字
「{n,}」~n回以上の繰り返し
「{n,m}」~n回以上m回以下の繰り返し
「{n}」~n回の繰り返し
特別なグループ表現
・・・(?=~)
先読み肯定グループ
後方の文字列が~だった場合の・・・にだけ一致する
・・・(?!~)
先読み否定グループ
後方の文字列が~ではない場合の・・・にだけ一致する
(?<=~)・・・
後読み肯定グループ
前方の文字列が~だった場合の・・・にだけ一致する
(?<!~)・・・
後読み否定グループ
前方の文字列が~ではない場合の・・・にだけ一致する