替换不属于某个特定字符串的文本


Replace text that it is not part of some specific string

冒着标题不明确的风险,因为我无法用几句话更好地解释它,我将准确地描述我试图实现的目标。

比方说我有一篇文章名为";Ilha de Faro";在它的描述中,我想用相应的链接替换所有出现的相关文章名称(来自db)。

到目前为止没有什么特别的。但是如果相关文章是";Faro"Praia";,等等,并且文章描述包含名称,我不希望它的单词被替换,所以"Ilha de Faro";不会转向";Ilha de Faro";。

我想在关系替换发生之前,用一些特殊字符串(如#$%&或其他什么)替换所有出现的名称,然后将特殊字符串替换回文章名称。但我想知道的是,是否有更直接、更干净的方法来做这件事,或者我的小变通方法是一个好方法?

提前感谢所有答案

编辑

我会更实际地看待这个问题。我还没有尝试过任何东西,因为我还没有到那个阶段,我只是提前考虑。所以,我有一个文章表,一篇文章可以有n篇相关的文章。有以下文章:

标题:Ilha de Faro

描述:Chamam lhe Ilha de Faro mas na realidadeéuma península,ligadaàterra firme do lado leste,perto da elegante Quinta do Lago。做一个女人,做一个男人,一个女人。体现在一个前沿地带,一个Faro esteja ocupada por alguma constructionção,一个区域性的中间层,它是自然资源的回报时刻。这是一个非常重要的组成部分,也是一个航空港的负责人,他与Verão航空公司的合作伙伴。barco的Carreiras是Faro的一部分(在加拿大,拉古纳斯和福尔摩沙岛)。

相关文章:Faro,Ria Formosa

我想要的是展示文章的描述和文本中相关文章的链接,所以它会是这样的:

Chamam lheIlha de Faro是一个真正的半岛,是一个陆地上的联赛,也是一个拉戈的金塔。做一个女人,做一个男人,一个女人。体现在一个前沿地带,一个Faro esteja ocupada por alguma constructionção,一个区域性的中间层,它是自然资源的回报时刻。这是一个非常重要的组成部分,也是一个航空港的负责人,他与Verão航空公司的合作伙伴。barco的Carreiras是<a> Faro </a>的一部分(在加拿大的cruzeiros turísticos diários pelos canais,lagunas e ilhas da <a> Ria Formosa </a>)。

注意粗体标题。。。它包含";Faro";,这是其中一篇相关文章的标题,但我不想没有"Ilha de <a> Faro </a>";。

我最初的想法是为模式创建一个相关文章标题数组,并创建另一个带有标记标题的数组作为替换,但这会替换所有内容,即使相关文章标题包含在父文章标题中。

好吧,我尝试了我提出的解决方案,它很有效。如果有人知道更清洁或"正确"的方法,欢迎提出建议。

不管怎样,对于任何有这个问题的人来说,以下是我是如何做到的:

$descTemp = preg_replace('/'.$articleTitle.'/', '!-article_title-!', $description);
$descTemp2 = preg_replace($relatedArticleTitles, $relatedArticleLinks, $descTemp);
$finalDescription = preg_replace('/!-article_title-!/', $articleTitle, $descTemp2);