<a href="http://www.example.com/foo/bar/" title="bar">Example</a>
href 属性でのみ「バー」を置き換えるにはどうすればよいですか?
ありがとうございました!
<a href="http://www.example.com/foo/bar/" title="bar">Example</a>
href 属性でのみ「バー」を置き換えるにはどうすればよいですか?
ありがとうございました!
まず、正規表現は適切なツールではありません。(少なくとも属性を見つけないでください。交換のために、おそらく...)
ただし、これはいずれにせよ正規表現ソリューションですが、すべての有効な DOM で機能することを保証することはできません。
$newStr = preg_replace(
'/(<a\s+[^>]*href="[^"]*)bar([^"]*"[^>]*>)/',
'$1newString$2',
$str);
正規表現の説明:
-Tagのhref
属性内にいることを保証するキャプチャ グループから始めます。a
これをキャプチャする理由は、置換が少しクリーンになるためです。では、他の属性を最初\s+[^>]*
に指定できますが、タグを閉じることはできません。は、属性[^"]
内のより多くのコンテンツhref
が最初に来ることを許可しますが、属性が閉じることはできません。次に、 がありbar
ます。そして、属性を閉じてからタグを閉じる前に、さらにいくつかのものを追加します。
置換では、キャプチャされたグループ$1
andを使用するだけです$2
(これには、適切な場所にあることを確認するために使用する必要があった の周りbar
のすべてが含まれます) が、間に新しい文字列が挿入されます (以前はあった場所bar
)。
-attribute>
の前に属性を含む場合、これは特に壊れます。href
このようなものはうまくいきますが、あなたが取りたい正確なアプローチは、特定のリンクに対して、またはページ内のすべてのリンクに対して (つまりグローバルに) 大文字と小文字を区別しないようにするかどうかと、置換の目的によって異なります。 .
$var = preg_replace('@<a href=(["\'])(.*)/bar/["\']@', "<a href=\\1\\2/foo/\\1", '<a href="http://www.example.com/foo/bar/" title="bar">Example</a>');