◆当サイトで人気のプログラミング教室のおすすめランキングはこちら!
プログラミングは独学では非効率で、時間を無駄にするリスクがあります。効率的なカリキュラムで学べるスクールを受講しましょう。

DMM WEBCAMP【マンツーマンサポート】1ヶ月短期集中でプログラミングを学ぶスクール
1ヶ月通い放題・メンター常駐の教室環境でプログラミングを学びたい方!
TechAcademyオンラインで開講しているプログラミングスクール
オンラインでどこでも学べる!/教室に行くのが忙しい人でも安心!
TECH::CAMP教養としてのITスキルを学べるスクール
Webデザイン/AI(人工知能)/IOS/Androidアプリ制作/VRを学びたい方!
DMM WEBCAMP PRO転職保証付き!エンジニアとして転職したい人におすすめ!
未経験からプロのエンジニアへ3ヶ月で転職する為のスクールです!
1月生募集中!当社人気の転職保証コース
プログラミング学習から転職成功まで導く、当社人気のDMM WEBCAMP PROコース。
12月生は満員となっております。1月生募集に向け、お早めの申込みをオススメします。
プログラミング未経験でもエンジニア転職を絶対成功させたい
スキルを身に着けて人生を自ら切り開きたい
上記にあてはまる方は、ぜひご検討ください!

プログラムというのは、入力されたある情報を処理して、結果を出力することを繰り返すことで成り立っていると言えます。

その情報には数値や画像、信号などいろいろとありますが、文字列を扱うことは少なくありません。

正規表現を使うことで、その文字列をシンプルかつスマートに扱うことができるのです。

文字列を探すということ

文字列を扱う上で、最初にすることは、文字列を探すことです。

「探していない」と思う人もいるかもしれませんが、それは人が文字列を見て一瞬でそれを理解できるからで、コンピュータにはそんな芸当はできません。

コンピュータが文字列を扱うとき、まず、その文字列が正しいかどうか、必要な文字列かどうかの確認をする(知っている文字列と一致するかどうか検索する)必要があるのです。

探す=一致しているかどうか

文字列を探すための基本は、一致しているかどうかです。

例えば、「みかん」という単語を数えるプログラムがあったとしましょう。

そのプログラムは、いくつも入力される単語の中から「みかん」に一致する場合、数を+1するといった作りになるでしょう。

具体的には、次のようなプログラムになります。

# 入力データ
datas = ["りんご","みかん","もも","かき","すいか","みかん","なす"]

# みかんの数
count = 0

# 入力データから1つずつデータを確認して、みかんが見つかれば数を+1する
for data in datas
  if data == "みかん" then  # ①
    count += 1
  end
end

# 結果表示
print("みかんの数 = ", count)

いろいろと複雑に見えるかもしれませんが、ここで注目するところは、①の「data == "みかん"」の部分だけです。

dataは、入力データdatasから取り出したデータが1つ入っている変数ですが、そのdataと"みかん"が等しい(==)場合に、countを+1しています。

つまり、一致しているかどうかで、探しているというわけです。

ちなみに、このプログラムの実行結果は、次のようになります。

みかんの数 = 2

探す=パターンがあるかどうか

ではもし、入力データが次のような場合はどうでしょうか?

datas = ["こうぎょくりんご","うんしゅうみかん","はくとうもも","たねなしかき","でんすけすいか","みっかびみかん","ただのなす"]

入力データには、ただ"みかん"と書いてあるのではなく、"うんしゅうみかん"と、ブランド名込みの名称になっています。

もちろん、みかんの数は2つに変更はありません。しかし、それは人が見ているから分かるだけです。コンピュータにとっては、どうなるでしょうか?

先ほどのdatasの部分を上記のデータに変更して動かしてみれば、一目瞭然です。

みかんの数 = 0

残念ながら、さきほどのプログラムは、"みかん"と完全に一致するデータ(完全一致)しか数えられません。そのため、同じみかんでも"うんしゅうみかん"や"みっかびみかん"は一部しか一致(部分一致)しませんので、違うものと認識されたわけです。

こんなときにこそ、正規表現が効果を発揮します。

まずは、プログラムを修正して確認してみましょう。修正する部分は、先ほど注目した①の「data == "みかん"」の部分だけです。

①の「data == "みかん"」の部分を、以下のように修正します。

data =~ /みかん/

細かな説明は後にしますが、この変更によって、"みかん"と完全に一致するデータの確認から、"みかん"という文字の並びのパターン(正規表現)を含むデータかどうかの確認に変わったわけです。
※ちなみに、「含まれない」ことを表す式は「!~」です。

“未経験”でもたった1ヶ月で営業からエンジニアとして転職!『WebCamp』受講者インタビュー

Rubyでの正規表現の使い方

前述の通り、正規表現を使うことで、コンピュータにより柔軟な処理をさせることができるのです。

上の例では、「"みかん"という文字の並び」といった単純なものでしたが、正規表現の実力はそんなものではありません。

その力を発揮させるために、まずはRubyでの正規表現の使い方を説明しましょう。

「//」を使う

先ほど紹介した、もっともポピュラーな方法です。

確認すべきパターンを//で囲むことによって、それが正規表現だと認識してくれます。

"みかん" …… 文字列
/みかん/ …… 正規表現

Regexp.new()を使う

Regexp.new()というメソッドに文字列を渡すことで、その文字列が正規表現だと認識してくれます。

Regexp.new("みかん") …… 正規表現

%rを使う

基本的には上2つ(主に1つめ)を使いますが、まれに必要になるのが、この方法です。

例えば、あるサイトの特定のページのURLを含んだ文字列を探そうとしている場合、以下のようにしてしまうことがあります。

url =~ /test.com/item/001/
[\ruby]

しかし、これでは//で囲んでいるのか、URLの途中なのか、区別がつきません。

このように、正規表現として「/」を含んだものを使いたい場合には、次のように記載すると、うまくいきます。

url =~ %r(/test.com/item/001/)
[/ruby

コツコツ独学×スクールで実践。未経験からエンジニアに転職!【WebCamp卒業生インタビュー】

正規表現のパターン・機能早見表

ここまでで、正規表現について説明してきました。

ここでは、正規表現(パターン)を表現するための「メタ文字」と「オプションフラグ」を一覧で紹介します。

メタ文字

メタ文字というのは、「文字そのもの」や「文字が0以上ある」、「一定の種類の文字」といったパターンを表現するための文字で、正規表現の要となるものです。

すべてをいっぺんに憶えることは難しいと思いますので、都度、ここに記載した表を確認して使って憶えていきましょう。

正規表現 意味
^ 行頭 /^abc/ → abcで始まる行
$ 行末 /abc$/ → abcで終わる行
. 改行を除く任意の1文字 /a.b/ → aとbの間に任意の文字1文字が挟まっている
[...] []内のいずれか1文字 /[A-Za-z]/ → 英字
[^...] [ ]内に含まれない1文字 /[^0-9]/ → 数字以外(数字の場合は/[0-9]/)
* 0回以上の繰り返し /a.*/ → aの1回以上の繰り返し
+ 1回以上の繰り返し /a+/ → aの1回以上の繰り返し
{m} m回の繰り返し /[0-9]{3}/ → 000から999の数字
{n,} n回以上の繰り返し /S{3}/ → 3個以上繰り返されているS(SSS、SSSS、SSSSS...)
{m,n} m回以上n回以下の繰り返し /S{2,3}/ → 2個か3個繰り返されているS(SS、SSS)
? 0回または1回 /aa?/ → aまたはaa
a|b aまたはb /ABC|abc/ → ABCまたはabcの行
(...) グループ化 /(ABC)+/ → ABCの1回以上の繰り返し
\w 英数字と_ /^\w+$/ → 英数字のみの行
\W 英数字と_以外 /Hello,\WWorld/ → Hello,とWorldの間に英数字以外の文字列
\s 空白文字 /Hello,\sWorld/ → Hello,とWorldの間に空白1文字
\S 空白文字以外 /Hello\SWorld/ → HelloとWorldの間に空白以外の文字
\d 数字 /a\d/ → aと数字1文字
\D 数字以外 /a\D/ → aと数字以外の1文字
\ メタ文字を文字にする /\./ → 「改行を除く任意の1文字」ではなく「.」

オプションフラグ

文字コードの問題など、メタ文字だけでは対応しきれない場合に使用するのが、これらのオプションです。

使用頻度は高くありませんが、「いざ」というときに思い出せるよう、「そういったものもある」程度には知っておきましょう。

フラグ 説明
i 大文字・小文字を区別しない /ab/i → ab,Ab,aB,AB
g 文字列内を最後まで、2番め、3番め以上のものもすべて検索する /ab/g → abが見つかったすべての場所を知ることができる
m 文字列内に改行があっても最後まで検索する 対象文字列"abc\nefg\nhij" /efg/m → マッチする

コツコツ独学×スクールで実践。未経験からエンジニアに転職!【WebCamp卒業生インタビュー】

まとめ

正規表現については、紹介しました。

じつは、正規表現は、それだけで本が1冊書けるほど奥の深いものです。そのため、ここで紹介したのはほんの一部だと思って良いでしょう。しかし、基本は押さえていますので、これからRubyの学習を進めていく上で困らない程度の内容にはなっていると思います。

今後も、早見表を見直していただければ幸いです。

・コンピュータは柔軟に考えて文字列を探せないので、パターンを教えてあげる必要がある
・正規表現は文字列のパターンのこと
・//で囲まれた文字列が正規表現だと解釈される
・Regexp.new("文字列")で、"文字列"は正規表現と解釈される
・「=~」もしくは「!~」という式を使って、正規表現で表された文字列が対象の文字列にあるかどうかを確認できる
・正規表現はメタ文字で表現する

DMM WEWBCAMP/DMM WEBCAMP PROについて

DMM WEBCAMPは1ヶ月でプログラミング・WEBデザインを学ぶ通い放題のプログラミングスクールです。DMM WEBCAMP PROは3ヶ月間で未経験から即戦力エンジニアを育成する転職保障付きのプログラミングスクールです。

2つのサービスを運営するインフラトップでは、「学びと仕事を通して人生を最高の物語にする」という理念で会社を経営しています。

キャリアアップを目指す方は、この機会に私達と一緒にプログラミングを学んでみませんか?

1月枠も残りわずか当社人気の転職保証コース
プログラミング学習から転職成功まで導く、当社人気のDMM WEBCAMP PROコース。
12月受入枠は満員となっております。1月枠に向け、お早めの申込みをオススメします。
プログラミング未経験でもエンジニア転職を絶対成功させたい
スキルを身に着けて人生を自ら切り開きたい
上記にあてはまる方は、ぜひご検討ください!

▼未経験から1ヶ月でWEBデザイン・プログラミングを学びたい方はこちら!


▼ついに開講!オンラインでWEBデザイン・プログラミングを学びたい方はこちら!

 

【インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!

ブラジルから帰国し技術をつけようとRubyエンジニアを目指してWebCampでRubyを学び、見事Webエンジニアとして転職を果たした田中さんにお話を伺いました。

Rubyの学習がしたい。基礎をしっかりと理解したい

転職のサポートがほしい

と考えている方はぜひお読み下さい。

【WebCamp卒業生インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!

おすすめの記事