1

次のような文字列があります。

$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 を使用して、「replace.com」の $description 文字列内の任意の URL に「?id=awesome」のクエリ パラメータを追加する必要があります (他のすべてのリンク、つまり「ignore.com」は無視されます)。

助けてくれてありがとう!

4

2 に答える 2

5

正規表現の代わりに 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>"));
于 2012-07-06T19:04:21.150 に答える
2

わかりました、とても簡単です、ここに行きます:

$content = preg_replace('/http:\/\/[^"]*?\.replace\.com\/[^"]+/','$0?id=awesome',$description);

$content には、replace.com ドメインにパラメーターを追加した文字列が含まれていることを願っています :)

于 2012-07-06T19:08:44.860 に答える