在段落中标记短语

时间:2010-06-24 09:03:24

标签: php regex string strpos find-occurrences

我正在使用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 个答案:

答案 0 :(得分:1)

步骤1.创建一个新数组,其中包含您要“标记”的实体的名称,并将其最长的实体名称命名为最短的实体名称。

步骤2.循环遍历此数组,并使用唯一标记(例如## . rand(100, 999) * rand(100, 999))替换文本中实体的每个出现。我们这样做是为了避免在构成另一个实体的实体周围创建链接。

步骤3.创建链接并将其存储在另一个数组中,其中数组中每个条目的键是唯一标记,值是您刚刚创建的链接。

步骤4.循环遍历链接数组,并使用与数组中的标记对应的链接替换文本中的标记。

答案 1 :(得分:0)

我不确定regexp是否可行。我会做这样的事情:

  1. 搜索短语
  2. 检查短语是否在链接内部(如果标记是开始标记,则搜索到标记a,而不是内部标记,如果是标记,则在内部)
  3. 如果你不在里面替换

答案 2 :(得分:0)

也许如果你使用贪婪的正则表达式来尽可能地匹配一个阶段。查看这些链接http://www.exampledepot.com/egs/java.util.regex/Greedy.htmlhttp://www.regular-expressions.info/repeat.html

答案 3 :(得分: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;

我敢肯定,有一个更好的正则表达式,因为总有;)但这种方式有效,只是测试了它:)