組込ライブラリ(Regexp)
正規表現。
成果物
情報源
Regexp
/^this is regexp/
str = "this is regexp" rp1 = Regexp.new("^this is regexp") p rp1 =~ str # => 0 p Regexp.last_match[0] # => "this is regexp"
p /abc/.frozen? # => true p /a#{42}bc/.frozen? # => true p Regexp.new('abc').frozen? # => false
正規表現 や リテラル/正規表現リテラル も参照してください。
メンバ抜粋
特異メソッド
compile escape last_match new quote try_convert union
インスタンスメソッド
== === =~ ~ casefold? encoding eql? fixed_encoding? hash inspect match match? named_captures names options source to_s
定数
EXTENDED FIXEDENCODING IGNORECASE MULTILINE NOENCODING
//
, new
, compile
new(string, option = nil, code = nil) -> Regexp compile(string, option = nil, code = nil) -> Regexp
引数 | 概要 |
---|---|
string |
正規表現を文字列として与える |
option |
Regexp::IGNORECASE, Regexp::MULTILINE, Regexp::EXTENDED の論理和。Integer以外なら真偽値とし真ならRegexp::IGNORECASEになる |
code |
n かN が与えられたとき正規表現のエンコーディングはASCII-8BIT になる |
概要 | 定数 | リテラル時オプション |
---|---|---|
大文字小文字を無視する | Regexp::IGNORECASE | /正規表現パターン/i |
メタ文字. が改行にマッチする |
Regexp::MULTILINE | /正規表現パターン/m |
フリーフォーマットモードになり空白を無視する。コメントの仕様が変化する | Regexp::EXTENDED | /正規表現パターン/x |
#{} の展開を1回しかしない |
? | /正規表現パターン/o |
オブジェクト生成
a = [ /^[a-zA-Z_][0-9a-zA-Z_]*$/, Regexp.new('^[a-zA-Z_][0-9a-zA-Z_]*$'), Regexp.compile('^[a-zA-Z_][0-9a-zA-Z_]*$'), ] a.each {|r| p r p r.class p r.match?('abc') # true p r.match?('0ab') # false }
大文字小文字を無視する
a = [ /^[a-z]+$/i, Regexp.new('^[a-z]+$', Regexp::IGNORECASE), Regexp.compile('^[a-z]+$', Regexp::IGNORECASE), ] a.each {|r| p r.match?('Abc') } # true
改行マッチ
a = [ /^[a-z]+$/m, Regexp.new('^[a-z]+$', Regexp::MULTILINE), Regexp.compile('^[a-z]+$', Regexp::MULTILINE), ] a.each {|r| p r.match?("abc\ndef") } # true
フリーフォーマットモード
r = /^ # コメントは除外 [a-z]+ # コメントは除外 $/x # コメントは除外 p r.match?('abc') # true
r = Regexp.new('^ # コメントは除外 [a-z]+ # コメントは除外 $', # コメントは除外 Regexp::EXTENDED) p r.match?('abc') # true
フリーフォーマットモードのとき半角スペースはバックスラッシュ\
でエスケープする。
r = /^ # コメントは除外 this\ is\ regexp # コメントは除外 $/x # コメントは除外 p r.match?('this is regexp') # true
r = Regexp.new('^ # コメントは除外 this\ is\ regexp # コメントは除外 $', # コメントは除外 Regexp::EXTENDED) p r.match?('this is regexp') # true
大文字小文字を無視する+フリーフォーマットモード
r = /^ this # コメントは除外 \ is # コメントは除外 \ regexp # コメントは除外 $/xi p r.match?('This is RegExp') # true
r = Regexp.compile(' this # コメントは除外 \ is # コメントは除外 \ regexp # コメントは除外 ', Regexp::EXTENDED | Regexp::IGNORECASE) p r.match?('This is RegExp') # true
所感
match
メソッドが返すMatchDataクラスも参照。
対象環境
- Raspbierry pi 4 Model B
- Raspberry Pi OS buster 10.0 2020-08-20 ※
- bash 5.0.3(1)-release
- Ruby 3.0.2
$ uname -a Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux