示例:
<a href="http://conis.cn" title="涂雅">跳转到涂雅</a>
<img src="http://conis.cn/test.jpg" alt="涂雅" />替换掉“涂雅”conis.cn,结果为:<a href="http://conis.cn" title="涂雅">跳转到conis.cn</a>
<img src="http://conis.cn/test.jpg" alt="涂雅" />请教一下,呵呵,谢谢

解决方案 »

  1.   

    $str = '<a href="http://conis.cn" title="涂雅">跳转到涂雅 </a> <img src="http://conis.cn/test.jpg" alt="涂雅" /> ';
    $pat = '@<a(.[^>]*)>(.*)(涂雅)(.*)</a>@';
    $rep = '<a$1>$2conis.cn$4</a>';echo preg_replace($pat,$rep,$str);
    //不知这个答案是不是你想要的 ?
      

  2.   

    楼上的,这段代码我还没有测试,但我其实是想对一段html进行替换同,这个html的数据是未知的
    已知的就是要对<tag></tag>以外内容进行替换,所以我觉得这个正则不能解决这个问题
    继续求解php中有没有反向引用的正则,不知道php用的是那个正则的流派
      

  3.   

    "想对一段html进行替换"  同和  "对<tag></tag>以外内容进行替换" ??理解不了你想表达什么
      

  4.   

    不替换同标签内的内容,明白我的意思么,对于尖括号内的,也就是html标签内的放过,其它的替换
      

  5.   

    <?php
    $str = '
    <a href="http://conis.cn" title="涂雅">跳转到涂雅 </a> 
    <img src="http://conis.cn/test.jpg" alt="涂雅" /> 
    <a href="http://conis.cn" title="涂雅">跳转到涂雅 </a> 
    <img src="http://conis.cn/test.jpg" alt="涂雅" /> 
    <a href="http://conis.cn" title="涂雅">跳转到涂雅 </a> 
    <img src="http://conis.cn/test.jpg" alt="涂雅" /> 
    ';
    $str = preg_replace('/(>.*)(涂雅)(.*<)/U','\1conis.cn\3',$str);
    echo '<xmp>';
    var_dump($str);
    ?>
      

  6.   

    呵呵,jnkc的正则ok
    感谢
    不过我还真没见过这种写法,甚至有些不太明白
    如果有时间,能否解释一下这个正则?
    我弄正则也有不少时间了,一方面道行比较浅,另一方面也因为主要是在js和c#下,没有在php下弄过正则,
    呵呵,还希望能赐教。
      

  7.   

    我的理解:
    '/(>.*)(涂雅)(.*<)/U'
    有三个捕获组,分别是(>.*)、(涂雅)、(.*<)
    第一个捕获组匹配html标签结尾的尖括号>,然后后面匹配零个或者多个任意字符
    第二个捕获组匹配关键字
    第三个捕获组同第一个捕获组相同,不过是以左尖括号结尾然后以第一个捕获组+要替换的关键字+第三个捕获进行替换觉得好像不太对,如果我理解是对的,那结果应该不是这样子,呵呵
      

  8.   

    1. 其实,关键在于楼主你的话有歧议,   -- 看实例:   <a title='abc0'>abc1</a> abc2   如上, abc0在标签内, 那abc2在标签外了, 而abc1呢?  这算是标签外还是标签内?
    2. 江南昆虫那个是匹配abc1,不包括abc2的情况
      

  9.   

    实际上,在一段html中,应该所有的内容都在标签内,最起码在<html>内的,所以肯定是标签内的
      

  10.   

    呵,还有一个问题,如果多次重复,只能替换一个,如下<?php $str = ' <a href="http://conis.cn" title="涂雅">跳转到涂雅涂雅 </a> 
    <img src="http://conis.cn/test.jpg" alt="涂雅" /> 
    <a href="http://conis.cn" title="涂雅">跳转到涂雅 </a> 
    <img src="http://conis.cn/test.jpg" alt="涂雅" /> 
    <a href="http://conis.cn" title="涂雅">跳转到涂雅 </a> 
    <img src="http://conis.cn/test.jpg" alt="涂雅" /> ';
     
    $str = preg_replace('/(>.*)(涂雅)(.*<)/U','\1conis.cn\3',$str); 
    echo '<xmp>'; 
    var_dump($str); ?>第二个涂雅无法替换,还请江南昆虫帮一下忙,感谢
      

  11.   

    笨方法while($temp != $str)
    {
       $temp = $str;
       $str = preg_replace('/(>.*)(涂雅)+(.*<)/U','\1conis.cn\3',$temp); 
    }
      

  12.   

    <?php
    $str = '11 涂雅22<a href="http://conis.cn" title="涂雅">跳转到涂雅涂雅 </a> 
    <img src="http://conis.cn/test.jpg" alt="涂雅" /> 
    <a href="http://conis.cn" title="涂雅">跳转到涂雅 </a> 
    <img src="http://conis.cn/test.jpg" alt="涂雅" /> 
    <a href="http://conis.cn" title="涂雅">跳转到涂雅 </a> 
    <img src="http://conis.cn/test.jpg" alt="涂雅" /> 33涂雅44';
     
    $str = preg_replace_callback('/(^|>).*涂雅.*(<|$)/U',create_function('$m', 'return str_replace("涂雅","conis.cn",$m[0]);'),$str);
    echo '<xmp>'; 
    var_dump($str);
    ?>
      

  13.   

    to 18#
    如果先匹配html标签, 再一个反转替换, 这样的正则好像很难写
    昨晚想了一晚, 以为只用一个正则能搞定, 结果还是要其它辅助 ?
      

  14.   

    嘿嘿,还有一个更好的<?php
    $str = '11 涂雅22<a href="http://conis.cn" title="涂雅">跳转到涂雅涂雅 </a> 
    <img src="http://conis.cn/test.jpg" alt="涂雅" /> 
    <a href="http://conis.cn" title="涂雅">跳转到涂雅 </a> 
    <img src="http://conis.cn/test.jpg" alt="涂雅" /> 
    <a href="http://conis.cn" title="涂雅">跳转到涂雅 </a> 
    <img src="http://conis.cn/test.jpg" alt="涂雅" /> 33涂雅44';//keyword[i]+"(?=[^<>]*<)","ig"
    //$pattern  = '/(>.*)(a)(.*<)/U'; 
    $pattern = "/(涂雅)(?=[^<>]*<)/";
    $str = preg_replace($pattern,'<a href="http://conis.cn">\1</a>',$str); echo '<xmp>';
    var_dump($str);
    ?>
      

  15.   

    not so good if just matching the a html