我有例如这些" a"标记:
<a href="http://www.domain.com/products/foo">Foo product</a>
<a href="/articles/bar">Bar article</a>
我使用这种模式:
/<a\s[^>]*href\s*=\s*(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>/siU
这个表达式向我返回两个标签(foo产品和条形文章)。 你可以帮我请一下如何制作一个只返回标签的表达式&#34; bar article&#34;?
谢谢。
编辑:
@Avinash Raj感谢您提示。
这种模式的结果对我有用:
/^.*<a\s[^>]*href="http:\/\/.*$(*SKIP)(*F)|<a\s[^>]*href\s*=\s*(\"??)([^\" >]*?)\1[^>]*>(.*?)<\/a>/miU
答案 0 :(得分:1)
使用DOM解析器,例如DOMDocument:
<?php
$site = <<<'EOT'
<a href="http://www.domain.com/products/foo">Foo product</a>
<a href="/articles/bar">Bar article</a>
EOT;
$doc = new DOMDocument();
$doc->loadHTML($site);
$anchors = $doc->getElementsByTagName('a');
foreach ($anchors as $a) {
$href = $a->getAttribute('href');
$scheme = parse_url($href, PHP_URL_SCHEME);
if (!isset($scheme)) {
echo $a->textContent; // output: Bar article
}
}
遍历每个<a>
元素。使用parse_url
解析网址。如果未在href
属性中设置方案,则回显内容。当然,你真正想要对元素做什么完全取决于你。
答案 1 :(得分:0)
您可以使用
<a href="(.*)<\/a>
使用preg_match_all,然后使用
从$ matches数组中获取最后一个结果$web = '<a href="http://www.domain.com/products/foo">Foo product</a>
<a href="/articles/bar">Bar article</a>';
preg_match_all("/<a href=\"(.*)<\/a>/", $web , $matches);
print_r( $matches[0][count($matches[0])-1]); // should only give Bar article
但是有人已经指出:不要使用正则表达式来搜索DOM。请改用DOM解析器!