2017-11-08 10 views
-1

を解読する正規表現は、なぜこれが起こるん:.Gsubと.Scan Rails。

filename 
=> "/Users/user/Desktop/work/arthouse/digitization/in-process/cat.jpg" 
[4] pry(DigitizedView)> filename.gsub(/.*\//,'') 
=> "cat.jpg" 

gsubの最初の引数に正規表現とは何ですか?私は.*が任意の数の任意の文字であることを知っています...しかし、バックスラッシュは何ですか? cat.jpg部分を除くすべてが削除されるのはなぜですか?

また、そのコードは

"cat.jpg".scan(/(\w+)-(\d+)([a-z]?)/) 
=> [] 

は何をしているのですか?

答えて

0

gsubメソッドの最初の引数である/.*\//の意味を調べてみましょう。

最初と最後のスラッシュ/.../は、文字列ではなく正規表現を扱っていることを示します。

この正規表現には2つの部分があります。 .*および\/

.*は、grepには空文字を含む任意の文字が含まれます。

\/は、そのgrepにスラッシュの文字列/と表示します。

この正規表現はキャッチだろう、

['/', 'Users/', 'user/', 'Desktop/', 'work/', 'arthouse/', 'digitization/', 'in-process/']

すべてのこれらの文字列は現在、 '' に置き換えられています。

cat.jpg末尾にスラッシュが付いていない点を除きます。

その説明が役立つことを願っています。第二部で編集

  • /(\w+)-(\d+)([a-z]?)/

    (\w+):数値のグループをgrepする:ダッシュ (\d+)ためのgrep: -(数字を含む)の単語文字のグループをgrepします数字 ([a-z]?):grep for nil charまたは単一のchar。

    cat.jpgこの正規表現にはさまざまな形で適合しません。文字列にダッシュはありません。.

    したがって、scanは空の配列を返します。

+0

2番目の部分はどうですか? – Jwan622

+0

'grep'は、文字列を最初の引数と照合し、一致した文字列を2番目の引数に置き換えるメソッドです。したがって、2番目の引数 '' 'は基本的にすべての一致する文字列を空のcharにします。 –

+0

スキャン部分を意味しますか? – Jwan622

0

Regexp /.*\//は、スラッシュで終わるゼロ個以上の文字と一致します。 String#gsubメソッドは、パターンに一致するすべての部分文字列を置換値(この場合は'')に置き換えます。'/''Users/''user/''Desktop/''work/''arthouse/''digitization/'、および'in-process/'

だから、この場合には、パターンは以下の部分文字列にマッチします。これらはそれぞれ空の文字列で置き換えられます。部分文字列が'/'で終了しないため、残りの部分文字列cat.jpgと一致しません。従って'cat.jpg'はすべて残っている。