LoginSignup
1
1

More than 3 years have passed since last update.

初学者によるプログラミングMemo #19 正規表現(基本編)

Last updated at Posted at 2020-01-24

はじめに
今回は正規表現(基本編)のお話です
正規表現を初めに見たときは、"/\d+\/\/"みたいなのを見てなんだこれは、謎の記号の羅列やんと思ったものです
ですが、私もプログラミング学習を進めていくうちに、少しずつわかってくるようになったので、このタイミングで書きたいと思います
なお、本記述はMacにおいて、Railsでの開発を前提としています
また、まだまだひよっこですので、不備等ございましたらご指摘いただけると幸いです

目次

  • 正規表現の各パーツについて
  • 正規表現でなんか取ってこよう

正規表現の各パーツについて

まずは謎の記号の羅列が、各パーツに分解できるところから知りましょう(今回は解説含むので、理解できているものを紹介します)

[abc]    #aかbかcのどれか1文字
[^abc]   #a,b,c以外の1文字
[a-z]    #a~zのうちのどれか1文字
[a-zA-Z] #a~zかA~Zのうちのどれか1文字
.        #任意の1文字
\d       #任意の数字
\w       #任意(文字、数字、アンダースコアのうちの)の1文字
(a|b)    #aかbどちらか
a?       #a("?"の直前の文字)が0回か1回か
a+       #a("+"の直前の文字)が1回以上
a{3}     #aが3回
\/       #\の使い方、"/"を文字として扱う

基本的なところはこんなところでしょうか
これを組み合わせることで正規表現が成り立っています
最初に述べた"\d+"は"\d"と"+"の組み合わせですね
つまるところ、任意の数字が1回以上、ということになります

正規表現でなんか取ってこよう

以前記事で書いた"scan"メソッドでも使って、文字列の中から任意の文字列を取り出してきましょうか

URLを取り出してみる

URLを取り出してみましょう
例えばこんな文章があるとします

私のQiitaのMYPageはhttps://qiita.com/Ikuy_hです

これからURLを取り出したいと思います
ただし、この一文にしかヒットしないのは汎用性が全くないので、汎用性のあるコードにしたいと思います

まず、URLの頭ですが、"http:"か"https:"のどちらかから始まっている(それしか知りません、間違ってたら教えてください)ので、まずはそこにマッチするかを記述してみましょう

https?:

できました
次に"/"です
前述したように、"/"を文字として考えなくてはいけませんので、こうなります

https?:\/\/

できました
次は何かしらの文字が来るはずです
その記述を行います
まずは文字が入っているかどうかと、文字が一回以上でるということを考えて記述してみます

https?:\/\/[\w]+

できました
前述した基本パーツの組み合わせです
[]はどれか[]内のどれか1文字でしたよね
\wは任意(文字、数字、アンダースコアのうちの)の1文字でしたよね
+はそれが1回以上出現するかどうかですね
しかし、これではまだ不十分です
だって…

"."があるじゃないか!!

そうです、\wでは"."は補完されません
あと記号としては"-","?","%","&","=","/"が考えられそうですね
なので…

https?:\/\/[\w\.\-?%&=\/]+

できました
()を使ったグループ化をする方がもっと綺麗にかけそうですが、まだ使いこなせていないので、今はこれでご勘弁を
ちゃんと理解したら、その時また記事書きます

さあ、では実際に、プログラミングしてみましょう

hp = "私のQiitaのMYPageはhttps://qiita.com/Ikuy_hです"

p hp.scan(/https?:\/\/[\w\.\-?%&=\/]+/)

# => ["https://qiita.com/Ikuy_h"]

取り出せましたね

さいごに

プログラミングというか、ものづくりあるあると言いますか、出来上がりを無知な状態で見ると「うわぁ…こんなん…」って思いがちですが、一つずつ理解していくとほとんどのケースで分解ができます
分解して考えるとより理解しやすくなりますね

1
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1