【问题标题】:RegEx help: need to grab images (Classic ASP)正则表达式帮助:需要抓取图像(经典 ASP)
【发布时间】:2014-05-08 21:09:33
【问题描述】:

我在经典 asp 中使用以下表达式,成功抓取任何带有 .jpg 和 .png 后缀的图像标签。

re.Pattern = " ]*src=[""'][^ >]*(jpg|png)[""']"

我发现的问题是我需要使用的许多网站实际上并未使用后缀。所以,我需要一个新的正则表达式来找到一个图像标签并抓取 src 属性中的任何内容。

听起来很简单,但如果不自己编写正则表达式来在 Classic ASP 中完成此任务似乎是不可能的(这是不可能的)。

请指教。

【问题讨论】:

  • 用正则表达式解析 HTML 是一项愚蠢的任务。我们其他人使用 DOM 方法。见:stackoverflow.com/questions/590747/…
  • @Diodeus 同意正则表达式不适用于 parsing HTML,但在这种情况下,他们正在阅读源代码并只是寻找不解析 HTML 嵌套结构的匹配项,所以我认为RegEx 是一种可接受的方法。

标签: regex asp-classic


【解决方案1】:

要在img src 上明确匹配,您可以这样做:

\<img src\=\"(\w+\.(gif|jpg|png)\")

然后,如果您只想要 img src 中的值,则可以匹配以图片扩展名结尾的引号中的任何内容(但这可能会导致误报,具体取决于您想要的内容):

\w+\.(gif|jpg|png)

但要在确保它遵循img src 的同时仅匹配该值,您需要一个否定的前瞻来执行此操作(请注意,我在那里添加了一个匹配组):

(?!.*\<img src\=\")(\w+\.(gif|jpg|png))

现在包括在您的图像源中包含图像链接的可能性:

(?!.*\<img src\=\")([\/\.\-\:\w]+\.(gif|jpg|png)?[\?\w+\%]+)

然后让我们通过修复 (gif|jpg|png) 之后的惰性量词并将其移动到下一组(匹配您可能在 JS 链接中获得的数据等)之后删除我们得到的误报,并确保我们有一个结束引用:

(?!.*\<img src\=\")([\/\.\-\:\w]+\.(gif|jpg|png)([\?\w+\%]+)?)(?=\")

注意:这将匹配此数据,但正则表达式不解析 HTML,我个人不建议使用正则表达式来查看 HTML 数据,除非您在就事论事。如果您想通过脚本进行一些 URL/图像抓取,请查看 XML/HTML 解析器。

样本数据:

<a href="myfile.htm"><img src="picture.gif"></a>
<a href="index.htm"><img src="pic859.jpg"></a>
<a href="page-57.htm"><img src="859.png"></a>
<img id="test1" class="answer1" src="text.jpg">
<img src="http://media.site.com/media/img/staff/2013/ROTHBARD-350_s90x126.jpg?e3e29f4a7131cd3bc7c4bf334be801215db5e3c2%22%3E">
<img src="yahoo.com/images/imagename.gif">

HTML Source

【讨论】:

  • 这很有帮助,非常有用。问题是太多次我发现
  • 这是一条非常有用的信息。幸运的是,因为我在寻找 src= 时有一个负面的前瞻性,即使它是 img id,它仍然与您提供的样本相匹配。如果不符合此标准,请随时提供其他示例/示例。
  • 我会测试,但它会在这个例子中找到 src 的值: 注意没有后缀。跨度>
  • 是的,我提到我对此进行了测试,并在“示例数据:”下的答案中添加了它。
  • 这个怎么样?我测试了它,它没有抓住它。 media.site.com/media/img/staff/2013/…">
猜你喜欢
  • 2012-11-30
  • 2023-03-19
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-01
相关资源
最近更新 更多