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

时间:2014-10-01 22:27:52

标签: php regex preg-replace

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

假设我有一篇名为“Ilha de Faro”的文章,并且在其描述中我想用相应的链接替换所有出现的相关文章名称(来自db)。

到目前为止没什么特别的。但如果相关文章是“法鲁”,“普拉亚”等,而文章描述中包含名称,我不希望其词语被替换,以便“Ilha de Faro”不会转向“Ilha” de Faro“。

我想在替换关系发生之前用一些特殊字符串(比如#$%&或其他)替换所有出现的名称,然后将特殊字符串替换为文章名称。但是,如果有更直接,更清晰的方法,或者我的小解决方法是一种很好的方法,我想知道什么呢?

提前感谢所有答案

修改

我会更加实际地看待这个。我还没有尝试任何东西,因为我不在那个阶段,我只是在思考。 所以,我有一个文章表,一篇文章可以有n篇相关文章。 有以下文章:

  

标题:Ilha de Faro

     

描述:Chamam-lhe Ilha de Faro mas narealidadeéumaalínsula,ligadaàterrafirme do lado leste,perto da elegante Quinta do Lago。做lado oposto,par leste,fica a barra,por onde passanavegaçãocoemerciale de recreio。 Embora a zona fronteira a Faro esteja ocupada poralgumaconstrução,o arealpareceinterminávele propicia belos instantes de repousoefruiçãodanatureza。 De carro a partir dacidadesãodezminutos de viagem,nadirecçãodoaeroporto,hasndo que contar com engarrafmentos e dificuldades de estacionamentonoVerão。 Carreiras de barco partir do cais de Faro(dondetambémpartemcruzeirosturísticosdiáriospeloscanais,lagunas e ilhas da Ria Formosa)podem ser uma boa alternativa。

     

相关文章:Faro,Ria Formosa

我想要的是提供文章的描述以及文本中存在的相关文章的链接,所以它会是这样的:

  

Chamam-lhe Ilha de Faro mas narealidadeéumaalínsula,ligadaàterrafirme do lado leste,perto da elegante Quinta do Lago。做lado oposto,par leste,fica a barra,por onde passanavegaçãocoemerciale de recreio。 Embora a zona fronteira a Faro esteja ocupada poralgumaconstrução,o arealpareceinterminávele propicia belos instantes de repousoefruiçãodanatureza。 De carro a partir dacidadesãodezminutos de viagem,nadirecçãodoaeroporto,hasndo que contar com engarrafmentos e dificuldades de estacionamentonoVerão。 Carreiras de barco a partir do cais de <a> Faro </a>(dondetambémpartemcruzeirosturísticosdiáriospeloscanais,lagunas e ilhas da <a> Ria Formosa </a>)podem ser uma boa alternativa。

注意标题为粗体......它包含“Faro”,这是其中一篇相关文章的标题,但我不想拥有“Ilha de <a> Faro {{1 }}”。

我最初的想法是为模式创建一个相关文章标题数组,另一个用替换标记标题创建,但这将取代所有内容,即使相关文章标题包含在父文章标题中。 / p>

1 个答案:

答案 0 :(得分:0)

好吧,我尝试了我提出的解决方案并且有效。如果有人知道更清洁或“更正确”的方式,欢迎提出建议。

无论如何,对于有这个问题的人来说,我就是这样做的:

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