Rubyの正規表現の特殊変数
正規表現
Rubyでは正規表現を生成する方法が大体二つある、即ち正規表現リテラルとRegexpクラスのクラスメソッドとなります。
正規表現を生成する
irb(main):001:0> a = /abcdefg/i
=> /abcdefg/i
irb(main):002:0> a.class
=> Regexp
irb(main):003:0> a = Regexp.new("abcdefg")
=> /abcdefg/
irb(main):004:0> a = Regexp.new("abcdefg", Regexp::IGNORECASE)
=> /abcdefg/i
Regexpのオプション
Regexp::IGNORECASE
大文字小文字の違いを無視する
irb(main):021:0> str = "This is Regexp"
=> "This is Regexp"
irb(main):022:0> t1 = Regexp.new("this is regexp", Regexp::IGNORECASE)
=> /this is regexp/i
irb(main):023:0> t1.match(str)
=> #<MatchData "This is Regexp">
irb(main):024:0> t2 = /this is regexp/i
=> /this is regexp/i
irb(main):025:0> t1.match(str)
=> #<MatchData "This is Regexp">
Regexp::MULTILINE
正規表現 「.」 が改行にマッチするようになります。
irb(main):028:0> str = "This is\nRegexp"
=> "This is\nRegexp"
irb(main):029:0> t2 = Regexp.new("This.*?Re", Regexp::MULTILINE)
=> /This.*?Re/m
irb(main):030:0> t2.match(str)
=> #<MatchData "This is\nRe">
irb(main):031:0> t2.match(str)[0]
=> "This is\nRe"
Regexp::EXTENDED
バックスラッシュでエスケープされていない空白と # から改行までを無視します。
irb(main):051:0> str = "this is regexp"
=> "this is regexp"
irb(main):052:0> t3 = Regexp.compile('
this # cannot be used
\ is
\ regexp # cannot be used
', Regexp::EXTENDED)
=> /
this # cannot be used
\ is
\ regexp # cannot be used
/x
irb(main):057:0> t3.match(str)
=> #<MatchData "this is regexp">
オプションの論理和
複数のオプションが論理和で使用可能となります。
irb(main):064:0> t4 = Regexp.compile('
this # cannot be used
\ is
\ regexp # cannot be used
', Regexp::IGNORECASE | Regexp::EXTENDED)
=> /
this # cannot be used
\ is
\ regexp # cannot be used
/ix
irb(main):069:0> str = "This is Regexp"
=> "This is Regexp"
irb(main):070:0> t4.match(str)
=> #<MatchData "This is Regexp">
特殊変数
特殊変数とは、パターンマッチした際に、マッチの情報をセットするローカルな変数となります。
[$~] 最後にマッチしたときの情報(MatchData オブジェクト)
Regexp.last_match
と同じ。
irb(main):001:0> /(abc)d(efg)/ =~ "abcdefghljklmnop"
=> 0
irb(main):002:0> Regexp.last_match
=> #<MatchData "abcdefg" 1:"abc" 2:"efg">
irb(main):003:0> $~
=> #<MatchData "abcdefg" 1:"abc" 2:"efg">
[$&] マッチしたテキスト全体
irb(main):004:0> $&
=> "abcdefg"
[$`] マッチしたテキストの手前の文字列
irb(main):006:0> /(bc)d(efg)/ =~ "abcdefghljklmnop"
=> 1
irb(main):007:0> $`
=> "a"
[$'] マッチしたテキストの後ろの文字列
irb(main):006:0> /(bc)d(efg)/ =~ "abcdefghljklmnop"
=> 1
irb(main):008:0> $'
=> "hljklmnop"
[$0], ファイル名
irb(main):009:0> /(bc)d(efg)/ =~ "abcdefghljklmnop"
=> 1
irb(main):012:0> $0
=> "irb"
[$1], [$2], ... キャプチャ文字列
irb(main):009:0> /(bc)d(efg)/ =~ "abcdefghljklmnop"
=> 1
irb(main):010:0> $1
=> "bc"
irb(main):011:0> $2
=> "efg"
[$+] 最後(末尾)のキャプチャ文字列
irb(main):013:0> /(bc)d(efg)/ =~ "abcdefghljklmnop"
=> 1
irb(main):014:0> $+
=> "efg"
Author And Source
この問題について(Rubyの正規表現の特殊変数), 我々は、より多くの情報をここで見つけました https://qiita.com/ColinLeefwz/items/714615dd037fa7271a0a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .