Вот лучшее регулярное выражение - оно имеет дело с дополнительными полями в тегах:
\<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 уже делает это, но я был бы удивлен, поскольку бывают случаи, когда вы хотите заменить только один экземпляр в целевом тексте.