问问题
904 次
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 回答