0

私はこのような文字列を持っています:

Google is a <a href="http://hi.hi?xxx&yyy&zzz">web&amp;search engine</a>.

W3Cバリデーターの必要に応じて、リンク内のみ&に置き換えたい:&amp;

Google is a <a href="http://hi.hi?xxx&amp;yyy&amp;zzz">web&amp;search engine</a>.

そのための正規表現を提案できますか?ありがとう!

4

3 に答える 3

1

公式の正解は、HTMLの解析に正規表現を使用しないことです。代わりに、HTML解析ライブラリを見てください。この質問はあなたのオプションをカバーしています:

PHPでHTML/XMLをどのように解析および処理しますか?

このアプローチを取ることをお勧めします。DOMなどのツールを使用してHTMLを解析すると、単純な正規表現を使用してリンク内で置換を実行できます。あなたが問題を抱えているならば、人々は喜んで助けてくれるでしょう。

これに正規表現を使用することを主張する場合(そして、HTMLコンテンツが管理されている場合は問題ない場合もあります)、このサイトを検索するだけで、人々がこれを行う方法を示すたくさんの質問が見つかります。

于 2012-09-27T14:55:56.483 に答える
1

dan1111が指摘したように、正規表現はせいぜいこのための脆弱なツールです。次の問題は、私が快適に感じるある程度の信頼性を得るには、可変長の後ろ向きアサーションが必要になることです。

そうは言っても、次のことが十分に機能する可能性があります。以前にバックアップしたデータを試してみてください。

$result = preg_replace('/&(?=[^<>]*>)/', '&amp;', $subject);

&これは、次の山かっこが閉じ角かっこである場合にのみ置き換えられます。

于 2012-09-28T05:51:45.243 に答える
0

先読みと後読みを使用できます。

&(?<=\<a\s(href).*)(?=.*\"\>)

&これが行うことは、前に< hrefあるすべての文字と任意の文字、および後に続く任意の文字を探すことです">RegexHeroでテストしたところ&、リンク自体の中でのみ選択されていました。

于 2012-09-27T15:01:05.427 に答える