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. 遍历 links 数组并将文本中的标记替换为与数组中的标记对应的链接。

于 2010-06-30T10:19:27.570 回答
0

我不确定这是否可以使用正则表达式。我会做这样的事情:

  1. 搜索词组
  2. 检查短语是否在链接内(如果它是开始标签而不是你可能不在里面,则向右搜索标签 a,如果它是你在里面的 eding 标签)
  3. 如果你不在里面,请更换
于 2010-06-24T09:17:52.137 回答
0

也许如果您使用贪婪的正则表达式从一个阶段尽可能多地匹配。查看这些链接http://www.exampledepot.com/egs/java.util.regex/Greedy.htmlhttp://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 回答