Rubyがミニツク

あなたのRubyの技術に関するより詳しい知識と理解を増やします。

Ruby入門コース

このコースについて

Rubyのeラーニング研修システムはRailsを使ってWebアプリケーション開発ができる技術者の育成を目指します。 そのため、Railsを扱うことができるだけのRubyの知識を得ることがRuby入門コースの目標となっています。

コンテンツ一覧

ヒント レッスンの名前をクリックすると、その内容を表示します。

次のコンテンツ ホームへ戻る

マッチさせたい文字の位置

ある特定の位置にある文字列にだけマッチさせたい時は正規表現オブジェクトの中で以下のような記号を使うことでマッチさせられます。

  • 行頭(^)
  • 行末($)
  • 文字の行頭(\A)
  • 文字の行末(\z)
str = ""
100.times do |i|
  str += "ruby"
  if (i+1) % 10 == 0 then
    str += "\n"
  end
end
print(str.gsub(/^ruby/, "Ruby"))
print(str.gsub(/ruby$/, "Ruby"))

「^」は文字列の先頭や改行文字の直後の位置にマッチしました。「$」は文字列の末尾や改行文字の直前の位置と直後の位置にマッチします。これらは行ごとにマッチするかを確かめます。
「^」や「$」は改行をおこなっているテキストの場合、改行ごとにマッチングを判定して置き換えします。次に文字ごとの行頭と行末だけ置き換えます。

str = ""
100.times do |i|
  str += "ruby"
  if (i+1) % 10 == 0 then
    str += "\n"
  end
end
print(str.gsub(/\Aruby/, "Ruby"))
print(str.gsub(/ruby\Z/, "Ruby"))

「\A」と「\Z」は置き換えをおこなう文字列オブジェクトをひとつの文として解釈します。そのため、文字の先頭と末尾だけ置き換えました。\Zは改行文字があってもマッチしますが、小文字の\zにすると改行文字は認識してくれません。

str = "ruby"
print(str.sub(/ruby\Z/, "Ruby"))    #=> Ruby
print(str.sub(/ruby\z/, "Ruby"))    #=> ruby
print(str.sub(/ruby\n\z/, "Ruby"))  #=> Ruby

正規表現の中に[]で囲んだ文字を入れることによって、マッチさせたい文字の範囲を指定できます。

str = "abcde"
print(str.sub(/[abc]/, "R"))   #=> Rbcde
print(str.sub(/[a-z]/, "R"))   #=> Rbcde
print(str.sub(/[A-Z]/i, "R"))  #=> Rbcde

指定した範囲以外の文字にマッチしたい時は、[]で囲んだ中に^を入れます。

str = "abcde"
print(str.sub(/[^abcd]/, "R"))  #=> abcdR
print(str.sub(/[^A-Z]/, "R"))   #=> Rbcde
print(str.sub(/[^a-z]/, "R"))   #=> abcde

[]の中にある「-」は範囲を意味します。そのため、文字として「-」を[]の中で指定したい時は一番前か後に入れないといけません。
 
<pre class="prettyprint linenums">
str = “000-000-000”
print(str.gsub(/]/, “,”))
print(str.gsub(/[a-z
, “,”))
print(str.gsub(/[-0-9], “,”))
</pre>

これまでは英数字のどれかを指定してマッチさせていました。直接英数字のどれかを指定するのではなく、任意の一文字にマッチさせたい場合は「.」を使います。

str = "abcde"
str.gsub!(/./, "A")
p str

正規表現オブジェクトの中でもバックスラッシュ記法を使うことができます。

str = "01234abcde"
result = str.gsub(/\w/, "A")
p result
result = str.gsub(/\d/, "A")
p result

\sは空白文字を意味します。\wはアルファベットのa〜zまでを意味します。\dは数字の0〜9までを意味します。


次のコンテンツ ホームへ戻る