我使用模式preg_match
使用$pattern = '/src="http:\/\/(.*?).jpg"/s';
来从网页上抓取jpeg图片的网址。但是,这还不够准确,因为它还会抓取http://www.domain.com/image.png"> Yadayada <img src="anotherpic.jpg
。
其他时候,它会抓住像
这样的东西 http://maps.google.com/maps/api/staticmap?center=42.34,-71.18&path=weight:4|42.338,-71.177|42.338,-71.183|42.342,-71.183|42.342,-71.177|42.338,-71.177&zoom=15&size=335x225&sensor=false" width="280" height="188" alt=""></td></tr> <tr><td height="10"></td></tr></table></td></tr></table></td></tr><tr><td height="10 valign="> </td></tr><tr><td valign="top" background="http://www.coolapartments.info/img/java-footer_bg.jpg
如何改进模式以防止不必要的匹配,如上面的2个示例?
答案 0 :(得分:3)
将(.*?).jpg
替换为([^"]*)\.jpg
,以避免越过src
属性的双引号边界。它与src="([^"]*)\.jpg"
甚至可以更通用,而不匹配http
。
答案 1 :(得分:2)
使用DOM和此XPath
//@src[contains(,. '.jpg')]
匹配某处包含字符串“.jpg”的元素的所有src属性。
如果属性应以“.jpg”结尾,请使用
//@src[substring(., string-length(.) - 4) = '.jpg']
这相当于XPath 2.0函数的结尾。
使用DOM和XPath的主要好处是它只能在src属性上运行,而你的正则表达式在任何地方都匹配。 DOM和XPath有很多用法示例: