我是正常表达的新手。我有以下网址:http://www.foo.bar.com/hgur_300x300.jpg
和http://www.foo.bar.com/hgur_100x100.jpg
我如何在rails中使用带有正则表达式的gsub来查找[300X300.jpg和180X180.jpg]并将其替换为500X500?
答案 0 :(得分:1)
"http://www.foo.bar.com/hgur_100x100.jpg".gsub(/\d+/, "500")
将取代两个" 100"使用" 500"
更新:
"http://www.foo.bar.com/hgur_100x100.jpg".gsub(/\d+x\d+/, "500x500")
会更准确
答案 1 :(得分:0)
请不要在整个网址上使用正则表达式。 URL应该是统一的,表达式很容易破坏它们。你应该首先将路径与其余部分分开,然后进行一些严格的表达。
此代码将使用Rubys uri
库来解析,然后直接修改路径。
uri = URI.parse("http://www.foo.bar.com/hgur_300x300.jpg")
uri.path #=> "/hgur_300x300.jpg"
uri.path.gsub!(/\d{3}/, '500')
uri.to_s #=> "http://www.foo.bar.com/hgur_500x500.jpg"
答案 2 :(得分:0)
我建议使用以下方法。
如果您的网址是纯字符串,那么只需"my_url.com/hgur_100x100.jpg".gsub(/\d+x\d+/,"500x500")
。
这将匹配“100x100”并将其替换为“500x500”
我建议这样做,因为如果您只是使用\d+/
进行匹配,则最终会匹配网址中的所有数字,包括端口号。
@ injekt使用URI.path
的方法非常好。我一直在使用URI,我认为这是一个非常可靠的模块。但这首先取决于你是否拥有格式良好的URI。例如,如果您打入一个网址(例如,手动输入一个www.mydomain.com/image333.png
而没有scheme
,则path
和host
也将是未定义的。