私はこのような文字列を持っています:
Google is a <a href="http://hi.hi?xxx&yyy&zzz">web&search engine</a>.
W3Cバリデーターの必要に応じて、リンク内のみ&
に置き換えたい:&
Google is a <a href="http://hi.hi?xxx&yyy&zzz">web&search engine</a>.
そのための正規表現を提案できますか?ありがとう!
私はこのような文字列を持っています:
Google is a <a href="http://hi.hi?xxx&yyy&zzz">web&search engine</a>.
W3Cバリデーターの必要に応じて、リンク内のみ&
に置き換えたい:&
Google is a <a href="http://hi.hi?xxx&yyy&zzz">web&search engine</a>.
そのための正規表現を提案できますか?ありがとう!
公式の正解は、HTMLの解析に正規表現を使用しないことです。代わりに、HTML解析ライブラリを見てください。この質問はあなたのオプションをカバーしています:
PHPでHTML/XMLをどのように解析および処理しますか?
このアプローチを取ることをお勧めします。DOMなどのツールを使用してHTMLを解析すると、単純な正規表現を使用してリンク内で置換を実行できます。あなたが問題を抱えているならば、人々は喜んで助けてくれるでしょう。
これに正規表現を使用することを主張する場合(そして、HTMLコンテンツが管理されている場合は問題ない場合もあります)、このサイトを検索するだけで、人々がこれを行う方法を示すたくさんの質問が見つかります。
dan1111が指摘したように、正規表現はせいぜいこのための脆弱なツールです。次の問題は、私が快適に感じるある程度の信頼性を得るには、可変長の後ろ向きアサーションが必要になることです。
そうは言っても、次のことが十分に機能する可能性があります。以前にバックアップしたデータを試してみてください。
$result = preg_replace('/&(?=[^<>]*>)/', '&', $subject);
&
これは、次の山かっこが閉じ角かっこである場合にのみ置き換えられます。
先読みと後読みを使用できます。
&(?<=\<a\s(href).*)(?=.*\"\>)
&
これが行うことは、前に< href
あるすべての文字と任意の文字、および後に続く任意の文字を探すことです">
。RegexHeroでテストしたところ&
、リンク自体の中でのみ選択されていました。