У меня есть строка вроде:
$description = ' <a href="http://www.replace.com/1st-link/">1st link in string</a>, <a href="http://www.ignore.com/">2nd link in string</a>, some other text in string, <a href="http://www.replace.com/3rd-link/">3rd link in string</a>. ';
Мне нужно использовать preg_replace для добавления параметра запроса «? Id = awesome» к любым URL-адресам строки $ description из «replace.com» (игнорируя все другие ссылки, т.е. «ignore.com»).
Заранее благодарю за любую помощь!
Хорошо, достаточно просто, вот вам:
$content = preg_replace('/http:\/\/[^"]*?\.replace\.com\/[^"]+/','$0?id=awesome',$description);
Надеюсь, что это так, $ content будет содержать строку с добавлением параметров в домен replace.com 🙂
Я настоятельно рекомендую использовать парсер DOM вместо регулярного выражения. Например:
$description = '...'; $wrapper = "<root>".$description."</root>"; $dom = new DOMDocument(); $dom->loadXML($wrapper); $links = $dom->getElementsByTagName('a'); $count = $links->length; for( $i=0; $i<$count; $i++) { $link = $links->item($i); $href = $link->getAttribute("href"); if( preg_match("(^".preg_quote("http://www.replace.com/").")i",$href)) $link->setAttribute("href",$href."?id=awesome"); } $out = $dom->saveXML(); $result = substr($out,strlen("<root>"),-strlen("</root>"));