0

preg_replace を使用して、いくつかの URL を含むテキスト内の単語のリストを置き換えています。問題は、これらの単語が URL の一部である場合、これらの単語を置き換えたくないということです。

次の例は無視してください。

foo.com

foo.com/foo

foo.com/foo/foo

基本的な例 (php で記述) として、負の先読みアサーションを使用して、.comとオプションのスラッシュと文字を含む文字列を無視しようとしましたが、成功しませんでした:

preg_replace("/(\b)foo(\b)/", "$1bar$2(?!(\w+\.\w+)*(\.com)([\.\/]\w+)*)", $text);

この呼び出しは、 .comの前の単語を無視するだけで機能します。どんな助けでも本当に感謝しています。

4

1 に答える 1

0

このような場合、問題を逆に考える方がはるかに簡単です。URL に含まれていない単語と一致させたい。代わりに、URLと単語を一致させたいと考えています。したがって、式は次のようになりますurl_match_here|(?:my|words|here)。これにより、正規表現エンジンは最初に URL を使用してから、それらの単語の照合を試みることができます。したがって、URL 内の単語の一致について心配する必要はありません。テキスト構造を維持したい場合はpreg_replace、次の式で , を使用して、URL とテキストを維持する(url_match_here)|(?:my|words|here)ために置き換えることができます。\1

これが役立つことを願っています。

幸運を。

于 2012-08-27T09:11:33.967 に答える