文字列の先頭(¥A)

広告

メタ文字の「^」と「$」はそれぞれ行の先頭と末尾にマッチするものでしたが、文字列の先頭と末尾にマッチするものも用意されています。「¥A」は文字列の先頭にだけマッチします。「^」との違いは文字列の中で改行が含まれていたとしても「¥A」は改行後の先頭にはマッチしません。

書式は次の通りです。

/¥Aパターン/

具体的な例で考えてみます。「abc¥ndef」と「def¥nabc」と言う2つの文字列に対してパターンを「/^abc/」と指定した場合にはどちらの文字列にも行頭に「abc」は含まれているため、どちらもマッチします。

abc¥ndef
○ def¥nabc

これに対してパターンを「/¥Aabc/」と記述した場合は、文字列の先頭の位置に「abc」がある場合だけマッチします。よって「abc¥ndef」はマッチしますが「def¥nabc」はマッチしません。

abc¥ndef
× def¥nabc

具体的には次のように記述します。

str = "def¥nabc"

if /¥Aabc/ =~ str then
  print("マッチします¥n")
else
  print("マッチしません¥n")
end

サンプルプログラム

では簡単なプログラムで確認して見ます。

test3-1.rb

#! ruby -Ku
require "kconv"

def check1(str)
  print(Kconv.tosjis(str + " は ^abc に"))

  if /^abc/ =~ str then
    print(Kconv.tosjis("マッチします¥n"))
  else
    print(Kconv.tosjis("マッチしません¥n"))
  end
end

def check2(str)
  print(Kconv.tosjis(str + " は ¥¥Aabc に"))

  if /¥Aabc/ =~ str then
    print(Kconv.tosjis("マッチします¥n"))
  else
    print(Kconv.tosjis("マッチしません¥n"))
  end
end

check1("abc¥ndef")
check1("def¥nabc")
check2("abc¥ndef")
check2("def¥nabc")

上記のプログラムを「test3-1.rb」として保存します。文字コードはUTF-8です。そして下記のように実行して下さい。

文字列の先頭(¥A)

( Written by Tatsuo Ikura )