检索所有<a href="....jpg&#34;"> tags in PHP</a>

时间:2012-04-04 01:13:10

标签: php regex

我使用了以下正则表达式:

$regex = '/<a href=\"([^\"]*)\">(.*)<\/a>/iU';

但总是无法检索我想要的标签。

它总是错过以下标签:

<a href="http://site.com/folder/img1.jpg" name="test">

它还将检索我不想要的那些,如:

<a href="mailto:helloworld@hotmail.com">

<a href="http://site.com/folder/index.html">

如何修改我的正则表达式,以便它将检索所有<a href="....jpg",如果我得到以下内容:

<a href="http://site.com/folder/img1.jpg" name="test">

它只会显示

<a href="http://site.com/folder/img1.jpg">

并且它也不会检索以下内容:

<a href="mailto:helloworld@hotmail.com">

<a href="http://site.com/folder/index.html">

谢谢。

如果可以提供有助于生成正则表达式的免费软件,我将不胜感激。

4 个答案:

答案 0 :(得分:2)

试试正则表达式

$regex = '/(<a href="([^"]+)\.jpg")[^>]*>/iU';

并替换为'\ 1&gt;'。

注意:

  • 删除了前面的逃生“;没有必要(虽然你可以留下它们,如果你想要,它不会产生差别)
  • 在最后\.jpg之前添加了明确的",仅匹配以.jpg结尾的链接。您可以考虑\.jpe?g允许'.jpeg'以及'.jpg'(虽然前者不常见)
  • 在第一个[^>]*的{​​{1}}之前添加了>,以允许使用<a href=...>等可选的额外属性
  • name="asdf"位周围添加了捕获括号,以便我可以替换 (<a href="xxx")(因此剥离所有额外属性)。

重新使用正则表达式生成工具,我不知道任何生成正则表达式。 我认为最好的办法是自己学习正则表达式,然后使用交互式测试程序快速开发它。

我强烈推荐regexr.com

如果你按照这个链接,你会看到我输入的正则表达式以及一些测试数据。

然后你可以玩正则表达式并实时查看结果 - 这对正则表达式的快速开发非常有帮助。

(虽然,regexr.com不提供不合适的'U'标记;只需将正则表达式中的所有\1>转换为++?转换为*即可进行模拟这一点)。

答案 1 :(得分:1)

我不知道你究竟使用这个正则表达式,但我认为这对你有用:

$your_string = '<a href="http://site.com/folder/img1.jpg" name="test">';
preg_match('@<a href="(.*?)".*?>(.*<\/a>)?@', $your_string, $matches);

print_r($matches) // Array ( [0] => http://site.com/folder/img1.jpg )

答案 2 :(得分:1)

查看http://gskinner.com/RegExr/

我喜欢那件事。

它将教你如何构建自己的模式。

正则表达式(正则表达式)是一种非常宝贵的编程技巧,适用于鬃毛服务器端和客户端编程语言。

答案 3 :(得分:1)

这将做你想做的事,也许与你期望的做法不同......

<?php
// set up to parse our input
$dom = new DOMDocument();
$dom->loadHTMLFile("input.html");
$xpath = new DOMXPath($dom);

$anchors = $xpath->query("//a[contains(@href, 'http') and contains(@href, '.jpg')]");

foreach ($anchors as $anchor) {
  echo $anchor->C14N() . "\n";
}
?>