我使用了以下正则表达式:
$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">
谢谢。
如果可以提供有助于生成正则表达式的免费软件,我将不胜感激。
答案 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)
答案 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";
}
?>