真面目に正規表現を学習してまとめる

自分が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 google 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回の繰り返し

 

 

特別なグループ表現

・・・(?=~)
先読み肯定グループ
後方の文字列が~だった場合の・・・にだけ一致する

・・・(?!~)
先読み否定グループ
後方の文字列が~ではない場合の・・・にだけ一致する

(?<=~)・・・
後読み肯定グループ
前方の文字列が~だった場合の・・・にだけ一致する

(?<!~)・・・
後読み否定グループ
前方の文字列が~ではない場合の・・・にだけ一致する

 

 

タイトルとURLをコピーしました