Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | 正規表現

パンくず

Ruby
正規表現

概要

Ruby正規表現について

内容

Rubyで使用できる正規表現の文法をまとめます

構文 概要 サンプル構文 サンプル結果
^ 行頭 ※改行がある場合は改行直後もマッチ puts "test hoge" =~ /^test/
puts "test\nhoge" =~ /^hoge/
0
5
$ 行末 ※改行がある場合は行末もマッチ puts "test hoge" =~ /hoge$/ 5
. 任意の一文字 puts "あ" =~ /./
"0" =~ /./
" " =~ /./
"" =~ /./
0
0
0
nil
\w 英数字。[0-9A-Za-z_]と同じ pattern = /\w/
puts "0" =~ pattern
puts "a" =~ pattern
puts "A" =~ pattern
puts "あ" =~ pattern

0
0
0
nil
\W 非英数字。\w 以外の一文字 pattern = /\W/
puts "0" =~ pattern
puts "a" =~ pattern
puts "A" =~ pattern
puts "あ" =~ pattern

nil
nil
nil
0
\s 空白文字。[ \t\n\r\f] と同じ pattern = /\s/
puts "\s" =~ pattern
puts "\t" =~ pattern
puts "\f" =~ pattern
puts "\r" =~ pattern
puts "0" =~ pattern
puts "a" =~ pattern
puts "A" =~ pattern
puts "あ" =~ pattern

0
0
0
0
nil
nil
nil
nil
\S 非空白文字。[ \t\n\r\f] 以外の一文字 pattern = /\S/
puts "\s" =~ pattern
puts "\t" =~ pattern
puts "\f" =~ pattern
puts "\r" =~ pattern
puts "nil" =~ pattern
puts "a" =~ pattern
puts "A" =~ pattern
puts "あ" =~ pattern

nil
nil
nil
nil
0
0
0
0


構文 概要 サンプル構文 サンプル結果
\d 数字。[0-9] と同じ。全角は除外 pattern = /\d/
puts "0" =~ pattern
puts "9" =~ pattern
puts "\s" =~ pattern
puts "a" =~ pattern
puts "A" =~ pattern
puts "あ" =~ pattern

0
nil
nil
nil
nil
nil
\A 文字列先頭 ※改行がある場合でも関係なし puts "test hoge" =~ /\Atest/
puts "test\nhoge" =~ /\Ahoge/
0
nil
\Z 行末。$と同様 省略 省略
\z 文末。※改行の有無は不問 p "\n".gsub(/$/, "o") "\no"
\b 語境界 p "test hoge hoo".gsub(/\b/, ":") ":test: :hoge: :hoo:"
\B 非語境界 p "test hoge hoo".gsub(/\B/, ":") "t:e:s:t h:o:g:e h:o:o"
[] 正規表現 [ ] は、文字クラス指定。[] 内に列挙したいずれかの一文字にマッチ p "hogea".gsub(/[hoge]/,'@') "@@@@a"
[^] 正規表現 [^ ] は、文字クラス指定の否定。[^] 内に列挙したいずれかの一文字以外にマッチ p "09azあ".gsub(/[^\d]/,'@') "09@@@"


構文 概要 サンプル構文 サンプル結果
\p{Alnum} 英数字 p "hoge2 aHOGE".gsub(/\p{Alnum}/,'@' #=>@@@@@ @@@@@
\p{^Alnum} 英数字以外 p "hoge2 aHOGE".gsub(/\p{^Alnum}/,'@' #=>hoge2@aHOGE
\p{Ascii} 7ビット文字 p "hoge2 aHOGE".gsub(/\p{Ascii}/,'@' #=>@@@@@@@@@@@
\p{Blank} 空白とタブ p "hoge2 aHOGE".gsub(/\p{Blank}/,'@' #=>hoge2@aHOGE
\p{Cntrl} 制御文字 p "hoge2 aHOGE".gsub(/\p{Cntrl}/,'@' #=>hoge2 aHOGE
\p{Digit} 数字 p "hoge2 aHOGE".gsub(/\p{Digit}/,'@' #=>hoge@ aHOGE
\p{Graph} 印字可能文字 p "hoge2 aHOGE".gsub(/\p{Graph}/,'@' #=>@@@@@ @@@@@
\p{Lower} 小文字アルファベット p "hoge2 aHOGE".gsub(/\p{Lower}/,'@' #=>@@@@2 @HOGE
\p{Print} 任意の印字可能文字 p "hoge2 aHOGE".gsub(/\p{Print}/,'@' #=>@@@@@@@@@@@
\p{Punct} 印字可能文字 p "hoge2 aHOGE".gsub(/\p{Punct}/,'@' #=>hoge2 aHOGE
\p{Space} 空白文字 p "hoge2 aHOGE".gsub(/\p{Space}/,'@' #=>hoge2@aHOGE
\p{Upper} 大文字アルファベット p "hoge2 aHOGE".gsub(/\p{Upper}/,'@' #=>hoge2 a@@@@
\p{Xdigit} 16進数を表す文字 p "hoge2 aHOGE".gsub(/\p{Xdigit}/,'@' #=>hog@@ @HOG@
\p{Word} 英数字、アンダースコア、マルチバイト文字 p "hoge2 aHOGE".gsub(/\p{Word}/,'@' #=> @@@@@ @@@@@
\p{Hiragana} ひらがな p "hoge2 aHOGEあア".gsub(/\p{Hiragana}/,'@' #=> hoge2 aHOGE@ア
\p{Katakana} カタカナ p "hoge2 aHOGEあア".gsub(/\p{Katakana}/,'@' #=> hoge2 aHOGEあ@


構文 概要 サンプル構文 サンプル結果
* 直前の表現の 0 回以上の繰り返し。最長マッチ p "AhogeZAhogeZAZ".gsub(/A(.*)Z/,'@\1@') "@hogeZAhogeZA@"
*? 直前の表現の 0 回以上の繰り返し。最短マッチ p "AhogeZAhogeZAZ".gsub(/A(.*?)Z/,'@\1@') "@hoge@@hoge@@@"
+ 直前の表現の 1 回以上の繰り返し。最長マッチ p "AhogeZAhogeZAZ".gsub(/A(.+)Z/,'@\1@') "@hogeZAhogeZA@"
+? 直前の表現の 1 回以上の繰り返し。最短マッチ p "AhogeZAhogeZAZ".gsub(/A(.+?)Z/,'@\1@') "@hoge@@hoge@AZ"
{m} 範囲指定繰り返し制御(interval quantifier)。
それぞれ直前の正規表現の * m 回 の繰り返し
"hogehogehoge".gsub(/(hoge){1}/,'@') @@@
{m,} 範囲指定繰り返し制御(interval quantifier)。
それぞれ直前の正規表現の * m 回以上 の繰りし
"hogehoge,hoge".gsub(/(hoge){2,}/,'@') @,hoge
{m,n} 範囲指定繰り返し制御(interval quantifier)。
それぞれ直前の正規表現の * m 回以上、最大 n 回 の繰り返し
"hogehogehoge,hogehoge,hoge".gsub(/(hoge){2,3}/,'@') @,@,hoge
{m}? 最短一致版 範囲指定繰り返し制御(interval quantifier)。
それぞれ直前の正規表現の * m 回 の繰り返し
puts "hogehogehoge,hogehoge,hoge".gsub(/(hoge){2}/,'@') @hoge,@,hoge
{m,}? 最短一致版 範囲指定繰り返し制御(interval quantifier)。
それぞれ直前の正規表現の * m 回以上 の繰りし
puts "hogehogehoge,hogehoge,hoge".gsub(/(hoge){2,}?/,'@') @hoge,@,hoge
{m,n}? 範囲指定繰り返し制御(interval quantifier)。
それぞれ直前の正規表現の * m 回以上、最大 n 回 の繰り返し
puts "hogehogehoge,hogehoge,hoge".gsub(/(hoge){2,3}?/,'@') @hoge,@,hoge


構文 概要 サンプル構文 サンプル結果
? 量指定子(quantifiers)。 直前の正規表現の 0 または 1 回の繰り返し。 puts "あほhogehogehogeです,あほhogehogeです,あほhogeです".gsub(/あほ(hoge)?です/,'@') あほhogehogehogeです,あほhogehogeです,@
? 量指定子(quantifiers)。 直前の正規表現の 0 または 1 回の繰り返し。最短一致 −ー −ー
| 選択(alternative)。前後のどちらかと一致すればマッチ p "はげとひげとほげ".gsub(/(は|ひ)げ/,'@') "@と@とほげ"
() 正規表現のグループ化。括弧の中の正規表現にマッチした文字列は後方参照で利用可能 p "はげとひげとほげとはげ".gsub(/(は|ひ)げ/,'[\1=>@],\2') "[は=>@],と[ひ=>@],とほげと[は=>@],"
\1\2...\n 後方参照 p "はげとひげとほげとはげ".gsub(/(は|ひ)げ/,'[\1=>@],\2') "[は=>@],と[ひ=>@],とほげと[は=>@],"
(?# ) コメント p "はげとひげとほげとはげ".gsub(/(?#はげ)と/,'@') "はげ@ひげ@ほげ@はげ"
(?: ) 後方参照を伴わないグループ化 p "はげとひげとほげとはげ".gsub(/(?:はげ)|(ひげ)/,'[\1=>@]') "[=>@]と[ひげ=>@]とほげと[=>@]"
(?=) ゼロ幅の肯定先読み(直後に任意の文字があるが、任意の文字自体はヒットさせたくない場合) p "hoge2 aHOGEあア".gsub(/[\w](?=g)/i,'@') "h@ge2 aH@GEあア"
(?!) ゼロ幅の肯定先読みの否定 p "hoge2 aHOGEあア".gsub(/[\w](?!g)/i,'@') "@o@@@ @@O@@あア"
(?<=) ゼロ幅の肯定戻り読み(直前に任意の文字があるが、任意の文字自体はヒットさせたくない場合) p "hoge2 aHOGEあア".gsub(/(?<=hoge)./i,'@') "hoge@ aHOGE@ア"
(?<!) ゼロ幅の肯定戻り読みの否定 p "hoge2 aHOGEあア".gsub(/(?<!hoge)./i,'@') "@@@@2@@@@@@あ@"