获取URL中图像名称的第一个匹配项(regex、Ruby)
我试图在URL(ruby)中注册第一个匹配的图像名 以下是我当前的代码:获取URL中图像名称的第一个匹配项(regex、Ruby),ruby,regex,Ruby,Regex,我试图在URL(ruby)中注册第一个匹配的图像名 以下是我当前的代码: @wikimedia_link.match(/(\/|:)([a-zA-Z\_\-0-9]*\.(jpeg|jpg|png|gif))/).try(:[], 2) 如果我有一个匹配项,即 http://en.wikipedia.org/wiki/File:Samuel_L_Jackson_Comic_Con.jpg 但是,这会返回一个错误(nil),这似乎是因为url中有“Lucy_desi_1957.JPG”和“22
@wikimedia_link.match(/(\/|:)([a-zA-Z\_\-0-9]*\.(jpeg|jpg|png|gif))/).try(:[], 2)
如果我有一个匹配项,即
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
你知道第一场比赛怎么打吗
谢谢大家! 以下正则表达式适用于您的两个示例
/^.+\/[\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
在匹配中使用此版本将仅返回“Lucy_desi_1957.JPG”
在任何一种情况下,如果没有找到匹配项,nil
将返回。如果希望文件名位于结尾,请添加一个$以匹配结尾
/(/|:)([\w-\.]+\.(jpeg|jpg|png|gif)$)/i
你想要的是:
@wikimedia_link[/[^\/:]+\.(?i:jpeg|jpg|png|gif)/]
使用(?i:…)
分组切换到不区分大小写的匹配,因此jpg或jpg将被匹配。我将这样做:
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"
此解决方案是最好的,因为它从简单url和简单文件名派生图像的文件名:
http://www.anexample.com/dog.jpg
http://www.anexample.com/342432_large-xs_dog.jpg
或者使用更复杂的文件名:
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
尝试获取所有匹配项并仅使用第一个?我更改了您问题的标签;它与Ruby on Rails无关,只与Ruby有关。我想他希望文件名位于路径的末尾。谢谢,在前端添加了^.+\/
。这不仅仅是文件名,而是返回整个url。我的正则表达式最初是/[\w::][+\(jpe?g | png | gif)/I
(检查编辑历史记录),但正如@QuentinUK所建议的,看起来OP可能也希望把URL放在前面。不管怎样,看起来OP已经解决了问题。我已经更新了我的答案,以反映我的原始模式。我意识到这一点。不过,我不确定@QuentinUK是从哪里得到这个想法的;这似乎与OP想要的正好相反:)此外,(根据第一个示例输出),OP似乎只想要原始图像文件名,而不想要mediawiki在与image.Hmm相关的一些URL中添加的“File:”。不知道为什么会被否决,因为这是目前唯一一个实际返回海报要求的结果的答案:在给定URL中第一次出现类似图像的文件名。哦,好吧。