比如有一段文本:
<p style="text-align: center;">
<span style="font-size: medium;">
<img class="goods_desc_img" src="http://www.test.dev/data/upload/article/201701/05/201701051138398638.jpg" alt="核桃树用什么树嫁接w.jpg" /></span>
</p>
<p>
<span style="font-size: medium;">核
<a class="news-in-link" href="http://www.test.dev/fenlei/10878_tao.html">桃树</a>,又名胡桃树、属胡桃科植物,品种分为野生山核桃和人工嫁接改良品种核桃。原产于中亚地带,中国各地均有种植,一般选择种植人工改良后的品种,因为改良后的品种要比野生的品种产量高,壳薄,俗称泡核桃。野生的壳厚、个大、油多等特点,吃起来较香,俗称铁核桃。
<br /></span></p>
<p align="center">
<span style="font-size: medium;">
<img class="goods_desc_img" src="http://www.test.dev/data/upload/article/201701/05/201701051138394778.jpg" alt="核桃树用什么树嫁接c.jpg" /></span>
</p>
<p>
<span style="font-size: medium;">
<br />一般只有同科同属的植物,相互嫁接效果才好,例如:李树、桃数 橘子树都可以 作为嫁接植物。
<br />嫁接
<a class="news-in-link" href="http://www.test.dev/fenlei/10833_hetao.html">核桃树</a>最好的是:
<br />1、实生核桃(核桃种子播种出的苗)
<a class="news-in-link" href="http://www.test.dev/">苗木</a>嫁接。
<br />2、胡桃科核桃楸属可嫁接,如常见的核桃楸(山核桃),但容易出现小脚现象(砧木细,嫁接口以上粗)。
<br />3、胡桃科枫杨属(南方),也可嫁接
<a href="http://www.haha.com">核桃</a>。
<br />总之核桃属之间的不同树种嫁接最好,亲和力强、适应能力强、丰产效果好。
<br /></span></p>
<p align="center">
<span style="font-size: medium;">
<img class="goods_desc_img" src="http://www.test.dev/data/upload/article/201701/05/201701051138383594.jpg" alt="核桃树用什么树嫁接.jpg" /></span>
</p>
<p>
<span style="font-size: medium;">
<br />嫁接完成,接芽上部保留3片复叶,剪掉上部枝梢;嫁接的芽片萌发出3-5公分,就应该剪掉接芽上部枝叶,促进接芽迅速萌发生长。其他未嫁接新稍适当控制生长,以便集中营养促进嫁接萌发的新稍健壮成熟。早实核桃嫁接当年形成花芽,第二年正常结果。</span></p>
我想替换里面的一个独立的文本中的关键词“核桃”为一个链接,同时要排除a标签或img的alt中的文本等可能出现“核桃”的地方,排除一个好办,但同时排除多个好像比较麻烦,哪位有比较好的解决方案?
下面是我的只过滤非a标签里的代码,但如果图片的alt里有还是会出问题。
$article['content'] = preg_replace('/(?!<a .*?>.*?)核桃(?![^<]*<\/a>)/i','<a href="'.$link.'" class="news-in-link">核桃</a>',$article['content'],1);
想到一个办法。
我们先匹配出我们不需要修改的内容。也就是a标签。将a标签全部取出并换成不重复的占位符,例如
A:01
, 然后我们全局替换我们要换的。替换后再用我们之前取出来的A标签数组来循环将占位符替换回真实的A标签内容。题主你说我是不是机智的Boy啊?:)