色々使える正規表現の覚え書き。
正規表現(Regular Expression, Regex)とは
正規表現とは、「いくつかの文字列を一つの形式で表現するための表現方法」。
この形式を使えば、違う言葉etc.が入った文字列でも検索することが可能となる。
正規表現では、「一つの形式で表現する」ため、いくつかの文字に対して特別な意味を与えている。
これらの特殊文字は「メタ文字」と呼ばれる。
これらのメタ文字を普通の文字として検索したい場合は、それらのメタ文字の前に「\」を付加する。
※ 上記メタ文字はすべて半角。
※ JIS配列のキーボードではバックスラッシュ「\」が印字されていない。
- Windows:「¥」を入力すると「\」として内部出力される(画面上は「¥」)。
- Mac: 「Option + ¥」で「\」が出力される。
- Mac mini等: 「Alt + ¥」で「\」が出力される。
▲ Windowsの、US配列(上)とJIS配列(下)のキーボード。US配列の「\」は、JIS配列では「¥」に割り当てられている。
「Search Regex」で使用するメタ文字の種類と役割
なんでも良い一文字 .
. は、「なんでも良い一文字」を表現する
正規表現 | 私は.が好き |
検索できる文字例 | 私は花が好き 私は君が好き 私は猫が好き |
... とつなげる事で、その文字数だけ「なんでも良い文字」として検索可能
正規表現 | 私は...が.. |
検索できる文字例 | 私はあなたが好き 私はトマトが嫌い 私はカエルが苦手 |
. そのものを検索したい場合は、 . の前に \ をつける
正規表現 | Watashi\.com |
検索できる文字例 | Watashi.com |
行頭の ^ と行末の $
4行頭にある、任意の文字を検索したい場合
正規表現 | ^よろしく |
検索できる文字例 | ○ よろしく ○ よろしくお願いします ✕ 今後ともよろしくお願いします ✕ これからもよろしく |
行末にある、任意の文字を検索したい場合
正規表現 | よろしく$ |
検索できる文字例 | ○ よろしく ✕ よろしくお願いします ✕ 今後ともよろしくお願いします ○ これからもよろしく |
行にその言葉しかない文字を検索したい場合
正規表現 | ^よろしく$ |
検索できる文字例 | ○ よろしく ✕ よろしくお願いします ✕ 今後ともよろしくお願いします ✕ これからもよろしく |
行頭にある ^ 、行末にある $ を検索したい場合
行頭にある普通文字 ^ の前に ^ 、行末にある普通文字 $ の前に $ を加える。
正規表現 | ^^ |
正規表現 | $$ |
同じ文字の繰り返し * , + , ?
同じ文字の繰り返しを表す正規表現は、 * , + , ? の3種類。
* 直前の文字が0か1個以上
※ ファイル名を指定する時のワイルドカードで使用する * とは意味が異なるので注意
正規表現 | たのしー*い |
検索できる文字例 | たのしい たのしーい たのしーーい たのしーーーい etc. |
上記例の場合、 * は直前の文字がなんであろうと関係なく、「ー」の後の文字が全くなくて「い」がくるか、「ー」が1個以上続いた後に「い」がきている場合に検索対象として認識される。
+ 直前の文字が1個以上
正規表現 | たのしー+い |
検索できる文字例 | たのしーい たのしーーい たのしーーーい etc. |
上記例の場合、 + は直前の文字がなんであろうと関係なく、「ー」が1個以上続いた後に「い」がきている場合に検索対象として認識される。
? 直前の文字が0か1個のみ
正規表現 | たのしー?い |
検索できる文字例 | たのしい たのしーい |
上記例の場合、 ? は直前の文字がなんであろうと関係なく、「ー」の後の文字が全くなくて「い」がくるか、「ー」が1個だけあった後に「い」がきている場合に検索対象として認識される。
これは、単数形と複数形どちらの場合でも合致させたい場合や、
正規表現 | Kids? |
検索できる文字例 | Kid Kids |
スペースがあるかどうか不明の文字列を検索する場合にも利用できる。
正規表現 | friend ?ship |
検索できる文字例 | friendship friend ship |
何でもいい文字の連続 .* , .*?
何でもいい一文字 . と、連続表現 * , + , ? の併用で応用範囲が広がる。
正規表現 | 貴方は素敵.*。 |
検索できる文字例 | 貴方は素敵。 貴方は素敵です。 貴方は素敵な人です。 貴方は素敵だと思います。 貴方は素敵です。それに、貴方のお友達も素晴らしい人だと思います。 etc. |
上記例最後の、二文続いた表現
「貴方は素敵です。それに、貴方のお友達も素晴らしい人だと思います。」
では、最後の「。」まで検索が続くことになる。
最初の「。」で終わらせたい場合は、 .*? を使う。
正規表現 | 貴方は素敵.*?。 |
検索できる文字例 | 貴方は素敵です。(← ここまで。)(ここからは検索されない →)それに、貴方のお友達も素晴らしい人だと思います。 |
いずれかの文字列 |
| で区切られた文字列のいずれかの文字列が存在した時に、正規表現に合致する事になる。
正規表現 | りんご|みかん|ぶどう |
検索できる文字例 | りんご みかん ぶどう |
指定した文字のどれか [ ]
[ ] 内の文字列のいずれかが存在した時に、正規表現に合致
正規表現 | 私は[赤白緑]が好きです。 |
検索できる文字例 | 私は赤が好きです。 私は白が好きです。 私は緑が好きです。 |
[ ] との併用で便利な表現
アルファベットや数字は、 [ ] 内では - で範囲指定のように利用できる
正規表現 | 製造番号[A-Z0-9]00 |
検索できる文字例 | 製造番号A000 製造番号A100 製造番号B200 etc. 26x10通りの英数字の組み合わせ |
[ ] 内で ^ を使うと、「以外」という意味になる
正規表現 | 製造番号A[^A-Z]00 |
検索できる文字例 | 製造番号A000 製造番号A100 製造番号B200 etc. Aの次は大文字アルファベット以外 |
[ ] 内では、メタ文字は普通の文字として認識される
正規表現 | 製造番号[.*] |
検索できる文字例 | . か *のいずれかの文字。いずれもメタ文字ではない。 |
正規表現 | 製造番号A[ABC^]00 |
検索できる文字例 | A, B, C, ^のいずれかの文字。^はメタ文字ではない。 |
ただし、 ^ を普通文字として認識させたい場合は、必ず [ ] 内の2番目以降に記載する。先頭に書くと、 ^ に続く文字を否定する意味のメタ文字になる。
[ ] 内の先頭文字 ^ は続く ^ を否定する
正規表現 | [^^A] |
検索できる文字例 | .^とA以外の文字。 |
[ ] 内に [ ] を書いた場合
[ は普通文字として認識されるが、 ] は \] としないと誤検索する
正規表現 | [[abc] |
検索できる文字例 | [,a,b,dのいずれか。 |
正規表現 | [\]abc] |
検索できる文字例 | ],a,b,dのいずれか。 |
[ ] 内で \ の文字を指定したい場合
[ ] 内で \ の文字を指定したい場合は、\\と記述
正規表現 | [\\abc] |
検索できる文字例 | \,a,b,dのいずれか。 |
[ ] 内で - の文字を指定したい場合
範囲と誤認識されないよう順番に配慮する
正規表現 | [-1] |
検索できる文字例 | -, 4のいずれか。 |
上記を [1-] と記述すると誤認識する。
グループ化 ( )
( ) 内に記述された文字列をグループ化して検索してくれる。
正規表現 | (じゃ)+ーん! |
検索できる文字例 | じゃーん! じゃじゃーん! じゃじゃじゃーん! |
正規表現 | 明日は(晴れ|雨|曇り)です。 |
検索できる文字例 | 明日は晴れです。 明日は雨です。 明日は曇りです。 |
直前の文字を○○回繰り返す { }
{ } 内の直前の文字を、数字の数だけ繰り返してある語句を検索。
正規表現 | ABCD{3} |
検索できる文字例 | ABCDDD (Dが3回繰り返されている文字) |
すべての数字 \d
正規表現 | \d |
検索できる文字例 | 1, 2, 3, 4 etc.(すべての数字) |
すべての英数字と半角アンダーバー \w
正規表現 | \w |
検索できる文字例 | a, b, 1, 2, _ etc. (すべての英数字とアンダーバー) |
改行 \n
正規表現 | \n |
検索できる文字例 | (改行) |
半角スペース\s
正規表現 | \s |
検索できる文字例 | (半角スペース) |
References
正規表現についてのチートシートです。正規表現の書き方を忘れた場合にご活用ください。