ホームページ >バックエンド開発 >PHPチュートリアル >正規表現を使用してリンクのないテキストを照合するにはどうすればよいですか?

正規表現を使用してリンクのないテキストを照合するにはどうすればよいですか?

WBOY
WBOYオリジナル
2016-06-23 13:28:19990ブラウズ

RegEx.Pattern = "(>[^>bd1cc358c528a03127d438f11ef6880c9b821229bd52c2511555f8812a8e6394CSDN5db79b134e9f6b82c0b36e0489ee08ed

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

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

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


回复讨论(解决方案)

有大神写过给个例子吗?

不清楚,同求
我爱CSDN 我爱CSDN,CSDN不爱我
然后中间有 CSDN的 就替换成
6752733ae8631ff566e47d8d2b003fdfCSDN5db79b134e9f6b82c0b36e0489ee08ed
如果第二次编辑的时候, 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;
我爱6752733ae8631ff566e47d8d2b003fdfCSDN5db79b134e9f6b82c0b36e0489ee08ed 我爱6752733ae8631ff566e47d8d2b003fdfCSDN5db79b134e9f6b82c0b36e0489ee08ed,6752733ae8631ff566e47d8d2b003fdfCSDN5db79b134e9f6b82c0b36e0489ee08ed不爱我

$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;
我爱6752733ae8631ff566e47d8d2b003fdfCSDN5db79b134e9f6b82c0b36e0489ee08ed 我爱6752733ae8631ff566e47d8d2b003fdfCSDN5db79b134e9f6b82c0b36e0489ee08ed,6752733ae8631ff566e47d8d2b003fdfCSDN5db79b134e9f6b82c0b36e0489ee08ed不爱我



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

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

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

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

字符串是

a3636607fd3011aef89ba54362b26b7b我是文章14的内容 111 abc 文章333 444 b7e0f1ef580aabf8424b8fdf30f10480文章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(.*?)\>/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;

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。