<iframe src="//www.googletagmanager.com/ns.html?id=GTM-W8GZ33F&l=dataLayer" height="0" width="0" style="display:none;visibility:hidden"></iframe>

正規表現とメタ文字について

Ruby
たま

pv:

メタ文字一覧

( ) [ ] { } . ? + * | \

( ) の使い方 ついでに . の使い方

( ) はそこでくくったパターンを抜き出してMatchDataの[1] 以降に詰めます . は任意のどんな一文字でも良いというパターンになります

p "ho3ge".match(/ho(.)ge/)
# => #<MatchData "ho3ge" 1:"3">

p "ho3ge".match(/ho(.)ge/)[1]
# => "3"

( ) が複数個ある場合でも [1]から順番に詰められます

p "ho3ge".match(/ho(.)(ge)/)
# => #<MatchData "ho3ge" 1:"3" 2:"ge">

[ ] の 使い方

[ ] の 使い方

[ ] は範囲指定で使われます [a-z] はアルファベットのaからzまでのいずれかに1文字合致していれば良いというパターンになります

[ ] は範囲指定で使われます [a-z] はアルファベットのaからzまでのいずれかに1文字合致していれば良いというパターンになります

p "hoge".match(/[a-z]/)
# => #<MatchData "h">
p "hoge".match(/[a-z]/)
# => #<MatchData "h">
p "333".match(/[a-z]/)
# => nil
p "333".match(/[a-z]/)
# => nil

当然合致しなければnilになります

当然合致しなければnilになります

アルファベット以外にも以下のような使い方もできます [0-9] 数値の 0,1,2,3,4,5,6,7,8,9 [A-Z] 大文字のアルファベットの A~Z

アルファベット以外にも以下のような使い方もできます [0-9] 数値の 0,1,2,3,4,5,6,7,8,9 [A-Z] 大文字のアルファベットの A~Z

{ } の使い方

{ } の使い方

{ } は何回繰り返したかを指定できます 数値が3回繰り返されているパターンとなります ([0-9]は一文字の数値という意味でしたね)

{ } は何回繰り返したかを指定できます 数値が3回繰り返されているパターンとなります ([0-9]は一文字の数値という意味でしたね)

p "333".match(/[0-9]{3}/)
# => #<MatchData "333">
p "333".match(/[0-9]{3}/)
# => #<MatchData "333">

? * + の使い方

? * + の使い方

? は0回もしくは1回合致するパターンになります 1回合致した場合

? は0回もしくは1回合致するパターンになります 1回合致した場合

p "hoge".match(/h?oge/)
# => #<MatchData "hoge">
p "hoge".match(/h?oge/)
# => #<MatchData "hoge">

0回合致した場合

0回合致した場合

p "oge".match(/h?oge/)
# => #<MatchData "oge">
p "oge".match(/h?oge/)
# => #<MatchData "oge">

* は0回以上に合致するパターンになります

* は0回以上に合致するパターンになります

# 3回合致した場合

p "333".match(/[0-9]*/)
# => #<MatchData "333">

# 0回合致した場合

p "333".match(/4*/)
# => #<MatchData "">
# 3回合致した場合

p "333".match(/[0-9]*/)
# => #<MatchData "333">

# 0回合致した場合

p "333".match(/4*/)
# => #<MatchData "">

+ は1回以上合致するパターンになります

+ は1回以上合致するパターンになります

p "333".match(/[0-9]+/)
# => #<MatchData "333">

# 1回以上合致しないといけないので一つも合致しない下記はnilが返ります

p "333".match(/4+/)
# => nil
p "333".match(/[0-9]+/)
# => #<MatchData "333">

# 1回以上合致しないといけないので一つも合致しない下記はnilが返ります

p "333".match(/4+/)
# => nil

| の使い方

| は またはでいずれかの条件に合致すればいいパターンになります

# hogeからhugaどちらかに合致すればいいパターンです

p "hoge".match(/hoge|huga/)
# => #<MatchData "hoge">

p "huga".match(/hoge|huga/)
# => #<MatchData "huga">

\ の使い方

\ はエスケープで使用され、今まで使ってきたメタ文字を文字として扱いたい場合に使います 通常に [ だけを書くとメタ文字として扱われてしまうので、 \[ と書くことで [ という文字に合致するパターンにできます

p "[".match(/\[/)
# => #<MatchData "[">

この記事を書いた人

たま

エンジニア天国の会社を作るべく動く。rubyとgolangが主な担当。フリーランスエンジニア歴3年。エンジニア歴8年。

たまの書いた記事一覧

関連記事