正規表現 応用編

2016年12月1日

今回の正規表現は中級以上と応用編をお届けします。

 

 

初級~中級

特殊文字 説明
| |で区切られたいずれかの文字列と一致
私|僕 
^ 行の先頭の文字列と一致
^稼ぐ
$ 行の末尾の文字列と一致
情報ブログ$
*
{0,}
直前の文字と 0 回以上一致
zo* → 「z」「 zoo」ともに一致

{1,} 
直前の文字と 1 回以上一致
zo+ →「 zo」「zoo」は一致。「z」 は一致しない
?
{0,1}
直前の文字と 0 回または 1 回一致
Windows? → 「Windows」「Window」ともに一致
. \n を除く任意の 1 文字に一致
.になりたい → 「鳶になりたい」「貝になりたい」ともに一致
\ 次に続く文字を単なる文字列として認識。正規表現に使用する特殊文字はそのままでは一致しないため\で特殊文字としての意味を打消す。
\を検索したい → \\ と記述。その他の特殊文字も同様。
[] 角かっこで囲まれた文字の中のいずれかに一致。
注意:[]内の特殊文字は普通の文字列として認識される。ただし、]と\と^は例外。
[か-く] → 「か」「が」「き」「ぎ」「く」「ぐ」のどれかと一致。
「^」を文字認識 → 「^^」のように重ねる。
「]」を文字認識 →「\]」
[^] []内の文字以外
[^か-こ] → か~こ、が~ご以外の文字
() ()内をの文字列をグループ化して扱う
(僕|私)は幸せ → 「僕は幸せ」「私は幸せ」
僕|私は幸せ → 「僕」 「私は幸せ」
(?i) ?i以降の英字の大文字・小文字関係なく一致
(?iq) → 「q」「Q」ともに一致
(?-i) ?-i以降の英字の大文字・小文字を区別して一致
(?-iQ) → 「Q」は一致。「q」は一致しない
{} {}に囲まれた整数の数だけの文字数と一致
o{2} → 「zoo」と一致。「zo」は一致しない
{min,max} 直前の文字列のmin回からmax回繰り返し
no{1,3}n → 「noon」「nooon」「noooon」
{min,} 直前の文字列のmin回以上繰り返し
no{1,}n →「noon」「nooon」「noooon」「nooooon」・・・。{1+}とは+同様
\n
\x0a
\cJ
改行
稼ぐ\nフリー・ノマドンナになりたい → 「稼ぐ
フリー・ノマドンナになりたい」
\b 単語区切り位置に一致
er\b → never の er と一致。verb の er とは一致しない
\B 単語区切り位置以外と一致
er\B → verb の er と一致。never の er とは一致しない
\s
[ \f\n\r\t\v] 
全角・半角スペース、タブ、などの任意の空白文字と一致
\S
[^ \f\n\r\t\v]
空白文字以外の任意の文字と一致
\r
\x0d
\cM 
キャリッジ リターン(改行コード)文字と一致
\t
\x09
\cI 
タブ文字と一致
\v
\x0b
\cK
垂直タブ文字と一致
\w
[A-Za-z0-9_]
アンダースコアも含む、任意のすべての文字と一致
\W
[^A-Za-z0-9_]
半角英数字とアンダースコア以外すべてと一致
\d
[0-9] 
すべての半角数字一致
0~9
\D
[^0-9]
半角数字以外すべて
0~9以外
\x x以降の2桁の英数字(16 進数)と一致
\整数 既に見つかって記憶されている部分と一致
(.)\1 → 「//」「ss」 
★(?=~) 後方の文字列が~だった場合の★にだけ一致
大阪市(?=中央区) → 「大阪市」に一致。「東京都」は一致しない
★(?!~) 後方の文字列が~ではない場合の★にだけ一致
東京都(?!大阪市) → 「東京都」に一致
(?<=~)★ 前方の文字列が~だった場合の★にだけ一致
(?<=大阪市)中央区 → 大阪市「中央区」一致。「東京都」は一致しない
(?<!~)★ 前方の文字列が~ではない場合の★にだけ一致する
(?<!大阪市)中央区 → 東京都「中央区」に一致

 

 

応用編

検索 正規表現
<>内の文字列 <.+?>
()内の文字列 \(.+?\)
「または」を検索 (\「|\」)
-と9のいずれか [-9]
4桁の数字 \d{4}
半角英文字 [\u\l] 
郵便番号 〒\d{3}-\d{4}
電話番号 0\d{1,4}-\d{1,4}-\d{4}
日付 \d{4}[/\.年]\d{1,2}[/\.月]\d{1,2}日?

 

 

 

 

全4回に渡ってお届けしました。
最初は使い方がイマイチ分からないかもしれませんが、例で試してみると動きが分かると思います。
基本は一覧で覚え、少し複雑な処理をしたいときは、基本を組み合わせてみてください。
それでは、ふじもとkでした!