0
<a href="http://www.example.com/foo/bar/" title="foo">
    <img src="http://www.example.com/foo/bar/" alt="foo" />
</a>

href属性でのみfooという単語をpreg_replaceするにはどうすればよいですか?

注:ページには複数のリンクがあります。

4

1 に答える 1

1

あなたはこれを行うことができます:

$str = preg_replace('/(href="[^"]*)foo/', '$1replacement', $str);

または、後読みを使用することもできます。

$str = preg_replace('/(?<=href="[^"]*)foo/', 'replacement', $str);

'これは、区切り文字がなく、属性内にエスケープがない場合にのみ機能することに注意して"ください。

これが、正規表現でHTMLを操作するのではなく、DOMパーサーの使用を実際に検討する必要がある理由です。

更新:パーサーを使用した適切な実装は次のとおりです(Googleに最初に表示されたのでPHP Simple HTML DOMパーサーを選択しました):

require "simple_html_dom.php";

$html = file_get_html($filename);
foreach($html->find('a') as $element)
{
    $element->href = preg_replace('/foo/', 'replacement', $element->href);
}

echoこれでファイルに保存または保存する$htmlと、正しく置き換えられたHTMLが含まれます。(DOMパーサーの使用はとても簡単です。);)

于 2012-10-20T09:38:17.700 に答える