[^>).*?)(CSDN)([^我爱CSDN 我爱CSDN,CSDN不爱我 $s =).*?)(CSDN)([^我爱CSDN 我爱CSDN,CSDN不爱我 如果重复次数多了">
当前位置:Gxlcms > PHP教程 > 怎样用正则匹配不带链接的文字?

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

时间:2021-07-01 10:21:17 帮助过:7人阅读

RegEx.Pattern = "(>[^><]*)" & Dat(0, i) & "([^><]*<)(?!/a)" '用这个词进行正则匹配
这是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$2$3';do {  $t = $s;  $s = preg_replace($p, $r, $t);}while($s != $t);echo $s;
我爱CSDN 我爱CSDN,CSDN不爱我

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



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

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

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

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

字符串是

文章我是文章14的内容 111 abc 文章333 444 文章asdf; jk555

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


	$abc = '欢迎';		$c='liw5ucms PHP版本即将发布,欢迎大家关注!en	人民dfds	dhh呵呵	站长导航	啊哈哈5ucms啊哈哈	邱嵩松tjgad';		echo '原文=
'.$c.'
'; echo '替换词=
'.$abc.'
'; // 第一步获取字符串里所有图片的正则表达式 preg_match_all("//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>/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 '去图+链接=
'.$c.'
'; // 第三步 按指定次数替换 $c = str_replace($abc,''.$abc.'',$c);//替换掉 指定次数 变成链接 echo '替换结果=
'.$c.'
'; // 第四步 恢复旧的图片 for($i=0;$i'.$c;

人气教程排行