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

href 属性でのみ「バー」を置き換えるにはどうすればよいですか?

ありがとうございました!

4

2 に答える 2

2

まず、正規表現は適切なツールではありません。(少なくとも属性を見つけないでください。交換のために、おそらく...)

ただし、これはいずれにせよ正規表現ソリューションですが、すべての有効な DOM で機能することを保証することはできません。

$newStr = preg_replace(
    '/(<a\s+[^>]*href="[^"]*)bar([^"]*"[^>]*>)/',
    '$1newString$2',
    $str);

正規表現の説明:

-Tagのhref属性内にいることを保証するキャプチャ グループから始めます。aこれをキャプチャする理由は、置換が少しクリーンになるためです。では、他の属性を最初\s+[^>]*に指定できますが、タグを閉じることはできません。は、属性[^"]内のより多くのコンテンツhrefが最初に来ることを許可しますが、属性が閉じることはできません。次に、 がありbarます。そして、属性を閉じてからタグを閉じる前に、さらにいくつかのものを追加します。

置換では、キャプチャされたグループ$1andを使用するだけです$2(これには、適切な場所にあることを確認するために使用する必要があった の周りbarのすべてが含まれます) が、間に新しい文字列が挿入されます (以前はあった場所bar)。

-attribute>の前に属性を含む場合、これは特に壊れます。href

于 2012-10-11T16:08:12.130 に答える
0

このようなものはうまくいきますが、あなたが取りたい正確なアプローチは、特定のリンクに対して、またはページ内のすべてのリンクに対して (つまりグローバルに) 大文字と小文字を区別しないようにするかどうかと、置換の目的によって異なります。 .

$var = preg_replace('@<a href=(["\'])(.*)/bar/["\']@', "<a href=\\1\\2/foo/\\1", '<a href="http://www.example.com/foo/bar/" title="bar">Example</a>');
于 2012-10-11T16:03:53.347 に答える