我有以下div:
<div class="divClass">Language:
<a href="http://www.some-site.com/something/something2/">EN</a>
<a href="http://de.some-site.com/something/something2/">DE</a>
<a href="http://es.some-site.com/something/something2/">ES</a>
<a href="http://fr.some-site.com/something/something2/">FR</a>
<a href="http://it.some-site.com/something/something2/">IT</a>
<a href="http://nl.some-site.com/something/something2/">NL</a>
<a href="http://pt.some-site.com/something/something2/">PT</a>
<a href="http://ru.some-site.com/something/something2/">RU</a>
<a href="http://gr.some-site.com/something/something2/">GR</a>
<a href="http://cn.some-site.com/something/something2/">CN</a>
<a href="http://pl.some-site.com/something/something2/">PL</a>
<a href="http://se.some-site.com/something/something2/">SE</a>
</div>
并使用此正则表达式模式:
/<div class="divClass"><a href="(.*)">(.*)<\/a><\/div>/i
要在以下表达式中使用:
$out=preg_replace('/<div class="divClass"><a href="(.*)">(.*)<\/a><\/div>/i',replace_link(substr('$1', strpos('$1','com/')+1),'$2'),$out);
我的preg_replace返回NULL。基本上我想从A标签中获取链接及其值,并将链接和值替换为我从replace_link
函数获取的内容。
任何想法如何做到这一点?
谢谢!
答案 0 :(得分:1)
你的正则表达式不好:它只匹配一个<a href=...> </a>
,你提供了很多。
你必须使用类似的东西:
/<div class="divClass">\(<a href="(.*)">(.*)<\/a>\)+<\/div>/i
(不确定php中的非捕获语法)
您还必须在输入中处理空格(空格字符,制表符,行尾)。 如果您确定输入,可以使用以下内容:
/<div class="divClass">[^<]*(<a href="(.*)">(.*)<\/a>[^<]*)+[^<]*<\/div>/i
答案 1 :(得分:1)
这是您使用DomDocument的方式:http://codepad.org/RxZ7URMB
// Create new DomDocument
$doc = new DomDocument();
$doc->loadHTML($html);
// Get all <a>
$anchors = $doc->getElementsByTagName('a');
foreach ($anchors as $a) {
echo $a->getAttribute('href') . PHP_EOL;
}
如果您想更进一步,请更换:http://codepad.org/diqRQhiZ
foreach ($anchors as $a) {
$a->setAttribute('href', replace_link($a->getAttribute('href')));
}
echo $doc->saveHTML();