Regular Expression

色々使える正規表現の覚え書き。

正規表現(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

にほんブログ村 子育てブログ ワーキングマザー育児へ