我写了preg match rules:
$subject = 'text <a href="http://google.com">LINK</a> text text <a href="http://google2.com">LINK2</a>';
$search = array(
'/\<a href\="(.*)\">(.*)\<\/a\>/i'
);
$replace = array(
"[a href=\"$1\"]$2[/a]"
);
echo preg_replace($search, $replace, $subject);
当在文本中只有一个链接时,一切都很好,然后是一个 - 一个代码
这是我在多个链接时获得的: “text [a href =”http://google.com“&gt; LINK text text”
答案 0 :(得分:2)
更改为'/\<a href\="(.*?)\">(.*?)\<\/a\>/i'
以使匹配不 - 贪婪。
答案 1 :(得分:0)
这是一个更好的正则表达式 - 它处理标签中的额外字段:
\<a (?:.*?)href\=[\"\']([^\"\']+?)[\"\'][^\>]*?\>(.+?)\<\/a\>
我想我已经逃脱了那里的所有特殊字符,我不确定PHP认为'特殊',但基本上这应该符合以下所有:
$subject = 'text <a id="test" href="http://google.com">LINK</a> text text <a href="http://google2.com" id="test">LINK2</a> text <a href="http://google3.com">LINK3</a>';
另外,我不知道PHP,但为了匹配Perl中的多个链接,你需要在该正则表达式的末尾加上/ g修饰符,所以:
$search = array(
'/\<a (?:.*?)href\=[\"\']([^\"\']+?)[\"\'][^\>]*?\>(.+?)\<\/a\>/ig'
);
将是您的搜索。也许preg_replace已经这样做了,但我很惊讶,因为有时你只想替换目标文本中的一个实例。