0
4

4 回答 4

2

试试正则表达式

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

并替换为 '\1>'。

笔记:

  • 删除了 "; 前面的转义符,没有必要(尽管您可以根据需要将它们留在里面,但这并没有什么不同)
  • \.jpg在最后一个之前添加了一个显式,"以仅匹配以 . 结尾的链接.jpg。您可能会考虑\.jpe?g允许“.jpeg”和“.jpg”(尽管前者并不常见)
  • [^>]*在第一个之前添加了>一个<a href=...>以允许可选的额外属性,例如name="asdf"
  • 在位周围添加了捕获括号,(<a href="xxx")以便我可以替换\1>(因此去除了所有额外的属性)。

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

我强烈推荐regexr.com

如果你点击那个链接,你会看到我输入的正则表达式和一些测试数据。

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

(虽然,regexr.com 不提供不贪婪的“U”标签;只需在正则表达式中将所有转换++?*转换*?以模拟这一点)。

于 2012-04-04T01:28:02.810 回答
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 )
于 2012-04-04T01:23:13.077 回答
1
于 2012-04-04T01:24:24.500 回答
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";
}
?>
于 2012-04-04T11:05:26.937 回答