Heim  >  Artikel  >  Backend-Entwicklung  >  怎样用正则匹配不带链接的文字?

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

WBOY
WBOYOriginal
2016-06-23 13:28:19965Durchsuche

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;

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn