Maison  >  Article  >  développement back-end  >  怎样用正则匹配不带链接的文字?

怎样用正则匹配不带链接的文字?

WBOY
WBOYoriginal
2016-06-23 13:28:19964parcourir

RegEx.Pattern = "(>[^> 这是ASP版本的 PHP用不行

做站内链接功能
需要循环匹配不带链接的文字
比如

我爱CSDN 我爱CSDN,CSDN不爱我

然后中间有 CSDN的 就替换成

CSDN

可能循环替换多次,如果直接替换 就会乱码了

所以求个正则,如果发现是链接和链接内的文字 就不替换

要求是  已替换过的 不再替换 比如  先把 “CSDN不爱我”  替换为链接 然后 再把 剩下的 “CSDN” 替换成链接
把 “CSDN不爱我” 替换了 ,那这句里的 “CSDN” 也不会再被替换


回复讨论(解决方案)

有大神写过给个例子吗?

不清楚,同求
我爱CSDN 我爱CSDN,CSDN不爱我
然后中间有 CSDN的 就替换成
CSDN
如果第二次编辑的时候, href中的csdn不要替换,

没人会吗?急呐

$s =<<< TXT我爱CSDN 我爱CSDN,CSDN不爱我TXT;$p = '/((?:^|>).*?)(CSDN)([^<]*(?:<(?!\/a)|$))/is';$r = '$1<a href="http://bbs.csdn.net/" title="$2">$2</a>$3';do {  $t = $s;  $s = preg_replace($p, $r, $t);}while($s != $t);echo $s;
我爱CSDN 我爱CSDNCSDN不爱我

$s =<<< TXT我爱CSDN 我爱CSDN,CSDN不爱我TXT;$p = '/((?:^|>).*?)(CSDN)([^<]*(?:<(?!\/a)|$))/is';$r = '$1<a href="http://bbs.csdn.net/" title="$2">$2</a>$3';do {  $t = $s;  $s = preg_replace($p, $r, $t);}while($s != $t);echo $s;
我爱CSDN 我爱CSDNCSDN不爱我



如果重复次数多了 还是会乱掉

比如 继续替换 我爱  爱我 加上链接
CS加链接
S加链接 

我现在用的是笨方法
1、把字符串里的图给换成数组标记
2、把链接也换
3、替换
4、还原图的数组标记
5、还原链接的数组标记

这样就不会乱了 但感觉效率好低啊  版主这个能否再改进下呢?

字符串是

怎样用正则匹配不带链接的文字?我是文章14的内容 111 abc 文章333 444 文章asdf; jk555

需要依次给
我是文章 文章 
都加上链接http://csdn.net 有没办法呢


	$abc = '欢迎';		$c='liw5ucms PHP版本即将发布,欢迎大家关注!en	<img alt="人民" src="/images/hh/02.gif" />dfds	<img alt="" src="/img/ad.gif" />dhh呵呵	<a tittle="人民" href="http://www.qiusongsong.com">站长导航</a>	啊哈哈<a href="http://www.5ucms.com">5ucms</a>啊哈哈	<a href="http://qiusongsong.net">邱嵩松</a>tjgad';		echo '原文=<br>'.$c.'<hr>';		echo '替换词=<br>'.$abc.'<hr>';							// 第一步获取字符串里所有图片的正则表达式						preg_match_all("/<img (.*?)\ alt="怎样用正则匹配不带链接的文字?" >/i",$c,$arryimg);						$imgtimes = count($arryimg);						for($j=0;$j<$imgtimes;$j++){ //读取出符合的关键词名称							$img = $arryimg[0][$j]; 							$c = str_ireplace($img,'@img['.$j.']@',$c);//替换掉 变成链接							$qimg[$j] = $img;//存入数组													} 						// 第二步获取字符串里所有超链接的正则表达式						preg_match_all("/<a(.*?)>(.*?)<\/a>/i",$c,$arrya);						$atimes = count($arrya);						for($j=0;$j<$atimes;$j++){ //读取出符合的关键词名称							$a = $arrya[0][$j]; 							$c = str_ireplace($a,'@a['.$j.']@',$c);//替换掉 变成链接							$qa[$j] = $a;//存入数组						}												echo '去图+链接=<br>'.$c.'<hr>';						// 第三步 按指定次数替换						$c = str_replace($abc,'<a href="http://baidu.com" title="百度" >'.$abc.'</a>',$c);//替换掉 指定次数 变成链接												echo '替换结果=<br>'.$c.'<hr>';												// 第四步 恢复旧的图片						for($i=0;$i<count($qimg);$i++){ 							$c = str_replace('@img['.$i.']@',$qimg[$i],$c);//替换掉 指定次数 变成链接						} 						//第五步 恢复旧的链接						for($i=0;$i<count($qa);$i++){ 							$c = str_replace('@a['.$i.']@',$qa[$i],$c);//替换掉 指定次数 变成链接						}  	echo '还原结果=<br>'.$c;

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn