正規表現

文字・数字

pass.match(/[a-z\d]{8,}/i)
  • [a-z] : 括弧で囲まれた文字のいずれか 1 個にマッチ
  • \d : 数字にマッチ
  • {n, m}: 直前の文字がn回以上m回以下出現。
  • i : 大文字・小文字を区別しない検索
mail = 'hoge@fuga.com'

mail.match(/@.+/)
=> #<MatchData "@tech-camp.com">
  • . : どの1 文字にもマッチ
  • + : 直前の文字の 1 回以上の繰り返しにマッチ

基本的に \A と \z を使うことが必須。
文章の頭から終わりまで。\Z(大文字)は文末が改行ならその手前まで。
なので改行を許容することになるので通常は\zを使う。

「*」「+」

*は直前の文字の0回以上の繰り返し
+は直前の文字の1回以上の繰り返し

正規表現オブジェクト

文字列で正規表現パターンを指定する。
エスケープ処理と混同しないため、\dなどの文字は\\dとバックスラッシュを2重にする。

var pattern = new RegExp("groups/\\d\\d/messages")

subメソッド gsubメソッド

subメソッドでは一致する文字列の最初の1つ目しか置換されない。
gsubメソッドではマッチする文字列の全てを置換する。
このgはグローバルマッチと呼ばれ、文字列内で指定した文字が複数含まれている場合、その全てを置換する。

str = "りんごを食べる"
str.sub(/りんご/,"みかん")
=> "みかんを食べる"

subメソッドは、第一引数に置き換えたい文字列を指定し、第2引数に変換後の文字列を指定する。操作したい文字列は/で囲む。

JavaScriptでは同じ機能を持つメソッドとしてreplaceメソッドがある。

matchメソッド

str = "Hello, World"

str.match(/Hello/)
=> #<MatchData "Hello">

str.match(/hoge/)
=> nil

matchは引数に指定した文字列がレシーバの文字列に含まれているか否かをチェックする。
含まれている場合は、指定した文字列がMatchDataオブジェクトの返り値となる。
含まれていない場合は、返り値がnilとなる。

MatchDataオブジェクト

マッチした文字列等はMatchDataオブジェクトで返る。
MatchDataオブジェクトから文字列等を取り出す際は、以下の様に配列と同様にして取り出す。

irb(main):001:0> str = "Hello, World"
=> "Hello, World"

irb(main):002:0> md = str.match(/Hello/)
=> #<MatchData "Hello">

irb(main):003:0> md[0]
=> "Hello"

コメント