0

URL(ruby)内の画像名の最初の一致を正規表現しようとしています。

これが私の現在のコードです:

@wikimedia_link.match(/(\/|:)([a-zA-Z\_\-0-9]*\.(jpeg|jpg|png|gif))/).try(:[], 2)

一致するものが1つある場合は、機能します( "Samuel_L_Jackson_Comic_Con.jpg"を返します)。

http://en.wikipedia.org/wiki/File:Samuel_L_Jackson_Comic_Con.jpg

ただし、これはエラー(nil)を返します。これは、URLに「Lucy_desi_1957.JPG」と「220px-Lucy_desi_1957.JPG」が含まれているためと思われます。

http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Lucy_desi_1957.JPG/220px-Lucy_desi_1957.JPG

最初の試合をどのように行うかについてのアイデアはありますか?

ありがとうございました!

4

4 に答える 4

0

あなたが欲しいものは:

@wikimedia_link[/[^\/:]+\.(?i:jpeg|jpg|png|gif)/]

グループ化スイッチを使用し(?i:...)て大文字と小文字を区別しないマッチングを行うため、jpgまたはJPGのいずれかがマッチングされます。

于 2012-12-13T21:05:18.207 に答える
0

最後にファイル名が必要な場合は、最後に一致するように$を追加します。

/(/|:)([\w-\.]+\.(jpeg|jpg|png|gif)$)/i
于 2012-12-13T20:48:27.983 に答える
0

これは私がそれをする方法です:

2.0.0-p247 :008 > image_url = 'http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Lucy_desi_1957.JPG/220px-Lucy_desi_1957.JPG'
 => "http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Lucy_desi_1957.JPG/220px-Lucy_desi_1957.JPG" 
2.0.0-p247 :009 > image_name = image_url.match( /[-_\w:]+\.(jpe?g|png|gif)$/i ) => #<MatchData "220px-Lucy_desi_1957.JPG" 1:"JPG"> 
2.0.0-p247 :012 > image_name.to_s
 => "220px-Lucy_desi_1957.JPG"

IRBなし:

image_url = 'http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Lucy_desi_1957.JPG/220px-Lucy_desi_1957.JPG'
image_name = image_url.match( /[-_\w:]+\.(jpe?g|png|gif)$/i );
puts image_name #=> "220px-Lucy_desi_1957.JPG"

このソリューションは、単純なURLと単純なファイル名から画像のファイル名を取得するため、最適です。

http://www.anexample.com/dog.jpg

または、より複雑なファイル名を使用します。

http://www.anexample.com/342432_large-xs_dog.jpg

または、画像がURLで複数回参照されている場合:

http://www.anexample.com/cat.jpg/upload/342432_large-xs_dog.jpg/xs/342432_large-xs_dog.jpg
于 2014-03-15T13:38:01.650 に答える
-2

次の正規表現は、両方の例で機能します

/^.+\/[\w:]+\.(jpe?g|png|gif)/i

"http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Lucy_desi_1957.JPG"そして、あなたは次のことだけで得ることができます

"http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Lucy_desi_1957.JPG/220px-Lucy_desi_1957.JPG".match(/^.+\/[\w:]+\.(jpe?g|png|gif)/i).to_a.first

ファイル名自体の直後にいる場合は^.+\/、正規表現からを削除し、そのままにしておきます

/[\w:]+\.(jpe?g|png|gif)/i

でこのバージョンを使用すると、matchのみが返されます"Lucy_desi_1957.JPG"

いずれの場合も、一致するものが見つからない場合は、nilに戻ります。

于 2012-12-13T19:42:38.930 に答える