3

私は PHP を使用しており、テキスト内にサイトの他のセクションへのリンクを作成しようとしています。たとえば、次のようになります。

I fell into the media industry aged 30, when David Mansfield, now on the board of
Ingenious Media, gave me my first break at Thames TV. From there, I worked at the
(now-defunct) Sunday Correspondent and IPC, before joining TDI, which became Viacom
and then CBS Outdoor. After 12 years in outdoor, I spent a year out doing overseas
outdoor consultancy work in Russia, Dubai and Spain, as well as launching the media 
CRM business, Media By Permission. I have been lucky enough to work across a range of 
media, but outdoor would definitely be my specialist subject on 'Mastermind'.

Ingenious MediaすべてのページにリンクしたいのですIngenious Mediaが、すべての言及をMediaメディア関連のページにリンクしたいと思います。

Media明らかに、単語を内部でリンクしたくありませんIngenious Media

いくつかの単語を二重にリンクすることなく、どうすればこれを行うことができますか?

前もって感謝します

4

4 に答える 4

1

ステップ 1. 「タグ付け」するエンティティの名前を含む新しい配列を作成し、最も長いエンティティ名から最も短いエンティティ名に並べ替えます。

ステップ 2. この配列をループして、テキスト内のエンティティーの各出現箇所を固有のトークン (例えば## . rand(100, 999) * rand(100, 999)) に置き換えます。これは、別のエンティティの一部を形成するエンティティの周りにリンクを作成しないようにするためです。

ステップ 3. リンクを作成し、それを別の配列に保存します。配列内の各エントリのキーは一意のトークンであり、値は先ほど作成したリンクです。

ステップ 4. リンク配列をループし、テキスト内のトークンを配列内のトークンに対応するリンクに置き換えます。

于 2010-06-30T10:19:27.570 に答える
0

たぶん、貪欲な正規表現を使用して、フェーズから可能な限り一致させる場合。これらのリンクhttp://www.exampledepot.com/egs/java.util.regex/Greedy.htmlおよびhttp://www.regular-expressions.info/repeat.htmlを参照してください。

于 2010-06-24T09:19:24.493 に答える
0
$string = '...your string from above....';

// Here we replace only "Media" when there is no "Ingenious " in front of it.
$string = preg_replace('#(?<!Ingenious )Media#', '<a href="media.html">Media</a>', $string);

// Here don't need to use a regex...
$string = str_replace('Ingenious Media', '<a href="ingenious_media.html">Ingenious Media</a>', $string);
echo $string;

確かに、より良い正規表現があると思います。'常に存在するからです;)しかし、このように機能するので、テストしただけです:)

于 2010-06-24T09:20:15.957 に答える
0

これが正規表現で可能かどうかはわかりません。私はこのようなことをします:

  1. フレーズを検索
  2. フレーズがリンク内にあるかどうかを確認します(タグ a を右に検索して、タグ a を開始している場合はおそらく内部にいない可能性が高く、編集タグの場合は内部にいます)
  3. あなたが中にいない場合は交換してください
于 2010-06-24T09:17:52.137 に答える