桃太郎2016/10/282019/6/12Rubyプログラマー初心者にとって、正規表現の使い方がいまいちよくわからないと感じている人も多いのではないでしょうか?正規表現の使い方がよくわからない正規表現の使い方をすぐに忘れてしまうそんな正規表現をわかりやすく理解できるように本記事では解説を進めていきます。文字列などの抽出を行うには?【実践】正規表現で置換処理を行うには?など、より実践的で具体的な内容まで幅広く解説をしていきます。この機会に正規表現をマスターし、使いこなせるようになりましょう。まとめそもそも正規表現とは?正規表現とは、わかりやすく定義すると、ある一定の規則で並んでいる文字列を検出するための技術のことです。正規表現ってそもそもなんだろう、何をするためのもの?という方はまずは以下の記事を参考にしてください。2019年4月2日それでは、サンプルコードを用いて、具体的な使い方を学習していきましょう。slice!について紹介していきます。match(マッチした部分を取得する)matchメソッドは正規表現にマッチした部分文字列を取得するときに使用します。.match(/正規表現/)以下の例では、正規表現で「*の勉強」にマッチする文字列を取り出しています。Railsの勉強"プログラムで使用されている「*」は、検索文字列を含む文字列を取得するときに使用します。matchメソッドの詳しい使い方については、以下の記事でも解説しています。2019年4月25日pre_match(マッチした部分の前を取り出す)pre_matchは正規表現にマッチした前の部分の文字列を取得します。"Rails"post_match(マッチした部分の後を取り出す)post_matchは正規表現にマッチした部分の後の文字列を取得します。slice!(マッチした文字列を取り出す)sliceはマッチした部分の文字列を取り出します。以下の例ではaから始まる最初の文字を取り出しています。nilslice!はレシーバからマッチした部分を削除します。"xxxxxx"使用例=~(マッチした部分のインデックスを返す)=~を使用するとマッチした部分の最初のインデックスを取得します。(マッチしなかったらtrueを返す)!~を使用すると正規表現でマッチしなかたらtrueを返します。truescan(マッチした部分をすべて配列で返す)scanは正規表現でマッチした部分を取得して配列で返します。"ruby"]正規表現で置換処理を行うには?置換処理とは、ある対象を別の対象に置き換える処理となります。そのある対象を一致した全ての箇所に対して置換するか、最初に一致した箇所のみ置換するか、その処理したい内容に応じたメソッドがRubyには用意されています。gsub!(一致した部分を全て置き換える)ある対象を一致した全ての箇所に対して置換したい場合は、gsub、gsub!メソッドを利用します。基本的な使い方は以下となります。置換対象.gsub(/置換したい文字/,置き換える文字)gsubとgsub!の違いは、置換対象に対して置換後の内容に上書きするかしないかの違いとなります。具体的な使い方と2つのメソッドの違いを以下のサンプルコードで確認してみましょう。Railsgsubメソッドもgsub!メソッドも置換した結果は同じですが、元の対象(target,target2)のデータも置換後の内容で上書きされるかされないかの違いがあることが確認できるかと思います。sub!(一致した最初の部分を置き換える)次に一致した最初の部分だけを置き換えるメソッドです。それが、sub,sub!となります。上記2つのメソッドの違いは、さきほどgsubの項目でご説明した内容と同じく、元のデータを上書きするかしないかの違いです。こちらも具体的なサンプルで確認してみましょう。Rails上のサンプルで確認頂いた様に、最初に一致した箇所の文字だけ置換されていることが分かります。split!メソッドを利用します。上記のメソッドを使うことで得られる結果(戻り値)は配列となります。こちらもサンプルコードを確認してみましょう。"World"]配列について、この機会に理解を深めておきたい方は以下の記事を参考にしてください。2018年9月4日メタ文字列の使い方メタ文字列の一覧メタ文字とは本来もつ文字の意味とは別に、プログラミングを行う上で定義した特別な意味を持つ文字列のことをメタ文字と呼びます。正規表現の処理では、このメタ文字列がとても強力な武器となります。以下のメタ文字列の一覧をご確認下さい。d,e次に利用頻度の高いメタ文字の使用例をご紹介します。繰り返しの表現0回以上の繰り返しでは"*"を使用します。"一致する文字列babaab0回以上ということはaがあってもなくてもいいのでbでも一致するわけです。1回以上の繰り返しでは"+"を使用します。baaaaa"一致する文字列abaabaaab1回以上なので、bだけでは一致しません。繰り返し回数が0回か1回のときは"?"を使用します。"一致する文字列bab0,1回なので、aaabなどは一致しなくなります。繰り返し回数がちょうどn回のときは{n}を使用します。"bb"一致する文字列bbbこのように、ちょうどbbbが3回のときしかマッチしません。繰り返し回数がn回以上のときは{n,}を使用します。"一致する文字列bbbbbbbbbbbbbb以上なので、際限なくマッチします。繰り返し回数がn回以下のときは{,n}を使用します。"一致する文字列aababbn回以下なので、bが消えてaだけのときもマッチします。繰り返し回数がn回以上、m回以下のときは{n,m}を使用します。"xxxxmorningbxxxx""一致する文字列ababb1回か2回のどちらもマッチするときは最大値の2でマッチします。文字クラスの省略記法a-z、A-Z、0-9のうちのいずれか1文字に一致する場合は\wを使います。"morning"一致する文字列2a0ajaiaOa要するに英数字はすべてマッチします。反対にa-z、A-Z、0-9のうちのいずれの1文字にも一致しない場合は\Wを使います。米このように、英数字以外はマッチします。空白文字に\f,\n,\r,\tに一致する場合は\sを使います。"morning"一致する文字列\n\f\n\r反対に空白文字に\f,\n,\r,\tに一致しない場合は\Sを使います。"morning"一致する文字列As0K10進数の数字に一致する場合は"\d"を使用します。"morning-morning-morning"一致する文字列34010進数の数字以外に一致する場合は"\D"を使用します。"9a"一致する文字列ji#要するに、数字以外はなんでもマッチします。指定する方法メタ文字列では文字列の位置を考慮して一致するかどうか判定できます。行頭を指定したい場合は"^"を使用します。行頭は先頭とは違い、\nで改行されたあとの先頭も含めるので1つとは限りません。行頭のbbb行末を指定したい場合は"$"をを使用します。行末ののbbb先頭を指定したい場合は"\A"を使用します。先頭のaaa改行後のaaaは含まれないことに注意してください。末尾を指定したい場合は"\z"を使用します。普段から使い慣れていないと、使い方を忘れてしまいがちです。正規表現で文字列などの抽出を行うには?正規表現で置換処理を行うには?などについて解説しました。説明した便利なメソットを使いこなせば、的確に文字列を操作することができます。メタ文字列と組み合わせて使えば思い通りに文字列をマッチさせられるでしょう。正規表現を覚えるには自分でさまざまなパターンを作成するのが一番の近道なので、独自の表現をたくさん作成してみてください。正規表現の使い方について忘れてしまったらこの記事を確認してくださいね!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。桃太郎20代は役者、30代はエンジニア、そして40代を迎えた現在、Webライターとして活動しながら、3人の息子たちの家庭教育、アンチエイジングなどにも力を入れて日々ノマドライフを楽しんでいます。