プログラミング

正規表現って何?【初心者向けに解説】

投稿日:

こんにちは、ケースケです。

最近はRubyを使って擬似的なシステムトレードのプログラムを書いてみたりしてます。

そしたら正規表現が必要になっちゃったので、ちょっと整理しておこうと思い、この記事を書いてみました。

参考までにどうぞ。

ケースケ
ケースケ

「正規表現って、とっつきにくくて無理…」という人の助けになれば嬉しいです。

正規表現って何?

そもそも正規表現という言葉自体、馴染みがないと思うので軽く説明。

正規表現ってのは、文章の中から指定したパターンに合致する文字列をひっかけるための検索条件の書き方みたいなもんです。

こんなやつ↓

/^a.*z$/

…うん。意味不明ですね(笑)

でもこれがまた便利でして、どのプログラミング言語でも関係なく使えるし、文字列操作の場面で活躍することも多いですね。

ちなみに僕の今回の用途としては、Webスクレイピング(インターネット上のサイトから自分が欲しい情報だけを抽出する方法)で使用する予定です。

細かく分解してみる

上記の例を細かく分解すると、少しずつわかってきます。

まず、最初と最後の「/」は、「ここ(/)からここ(/)までが正規表現ですよー」っていう意味です。

次に「^」。これは「行の先頭はこれ(^に続く表現)から始まりますよー」っていう意味。

そして「$」は、「行の末尾はこれ($の直前の表現)で終わりますよー」という意味になります。

んで、「a」と「z」はなんか特別な表現とかじゃなく、普通に文字としての「a」と「z」です。

頑張って、もうちょっとで終わるから!

あとは「.」と「*」ですが、まず「.」は「任意の1文字」を表します。

そして「*」の意味は、「直前の表現の0回以上の繰り返し」。

つまり、「.*」の意味は、「任意の1文字を0回以上」ということになります。

難しい表現をしてますが、要するに「どんな文字でも、どんな長さでもOK」ってこと。

うん。結局難しいですね(笑)

でもおめでとう!もう終わったよ!

冒頭に示した正規表現の例の意味は、「aで始まってzで終わる行」ということになりますね!

ここまで分かれば正規表現?何それおいしいの?状態は抜け出せました。

お疲れ様でした!

正規表現に登場するメタ文字一覧

例で登場した「^」とか「$」とかはメタ文字と呼ばれます。

このメタ文字さえ読めれば、自由に正規表現を使って自分の欲しい情報を取得することができます。

今後、正規表現について確認したい時は以下の表を参考にしてください。

^行の先頭
$行の末尾
¥d数字
¥D数字以外
¥w単語構成文字(英数字と"_")
¥W単語構成文字以外
¥s空白文字(タブ、スペース、改行など)
¥S空白文字以外
*直前の表現の0回以上の繰り返し
+直前の表現の1回以上の繰り返し
?直前の表現に0回または1回マッチ
{n}直前の表現のn回の繰り返し(nは数字)
{n,}直前の表現のn回以上の繰り返し(nは数字)
{n, m}直前の表現のn回以上m回以下の繰り返し(n,mは数字)
a | baまたはbにマッチ(a,bは任意のパターン)
( )正規表現をグループ化する。後方参照のためマッチした文字列を記憶する
[ ][ ]内のいずれか1文字にマッチ
[^ ][^ ]内に含まれない1文字にマッチ

終わりに

正規表現は覚えてしまえばとっても便利に使えます。

めちゃくちゃ奥が深いし、僕自身も正直まだ半分も理解できてない気がしますが、細かい部分は使ってるうちに調べたりしながら身についていくと思うので、どんどんパターンを作って試してみましょう。

例えば自分が普段見ているサイトから、この部分の情報を抜き出すには、どんな正規表現パターンが必要かな?と考えてみても面白いですね。

覚えた技術は使いながら磨いていきましょう!

それでは。

-プログラミング
-,

Copyright© みちのくBASE , 2021 All Rights Reserved