0

有什么简单的方法可以在 bash/或 PHP 中提取这个 URL?

http://shop.image-site.com/images/2/format2013/fullies/kju_product.png

从这个 HTML 代码?

<a href="javascript: open_window_zoom('http://shop.image-site.com/image.php?image=http://shop.image-site.com/images/2/format2013/fullies/kju_product.png&pID=31777&download=kju.png&name=13011 KELLYS Kju: 490mm (19.5&quot;)',550,366);">
4

4 回答 4

2

bash中,您可以尝试以下操作:

sed 's/.*image=\(http:\/\/[^&]*\).*/\1/g'

更新
上面的解决方案执行替换而不是提取。包含模式(必需的 url)的行被模式本身替换。但是,替换不是就地的。

于 2013-02-27T22:50:22.497 回答
2

使用 perl,您可以进行匹配和捕获

perl -n -e 'print "$1\n" if (m/image=(.*?)\&/);'

这将捕获image=和下一个之间的所有内容并将其&打印出来$1

有关正则表达式的更多信息,请参阅perlrehttp://www.regular-expressions.info/

于 2013-02-27T22:54:27.670 回答
1

无论您决定以哪种方式修饰它,您都可以简单地使用等于的分隔符拆分?image=,然后result[1]使用简单的分隔符拆分您收到的第二个令牌(即 )&。该拆分的第一个结果就是您的答案。

但是,纯正则表达式匹配看起来像:m#image=(a-z0-9\:/\.\-)&#i. 您可以使用该正则表达式并将其放在您想要存储结果的任何位置$1。尽管很多人认为,您不必匹配行首和行尾来匹配结果。

于 2013-02-27T22:52:32.477 回答
1

尝试这样做:

xmllint --html --xpath '//a/@href' file://file.html |
    grep -oP 'image=\Khttp://.*?\.png'

您可以使用 URL 而不是本地文件:

http://domain.tld/path

或者,如果您已经提取了要在$string变量中解析的行:

grep -oP 'image=\Khttp://.*?\.png' <<< "$string"
于 2013-02-27T22:55:28.703 回答