比如 这个字符串
123xxx456<a href="http://www.xxx.com/xxx/asd">xxx</a>xxx789我想用正则替换A标签之外的两个xxx,而A标签内,包括href中的xxx都无视。
请问正则该怎么写?

解决方案 »

  1.   

    preg_replace('/(\d+)xxx(\d+)/is', '$1$2', $string);
    preg_replace('/(<\/a>)xxx(\d+)/is', '$1$2', $string);
      

  2.   

    给个思路:
    1. 将<a>标签内部的内容匹配出来放在一个字符串str1中, 同时把<a>标签替换成一个特殊字符str2;
    2. 将替换后的字符串里的xxx做全局替换处理得到新的字符串str3;
    3. 将str3中的str2替换成str1即可。这不是最简便的方法,但也是一种解决方案哈
      

  3.   


    嗯  谢谢   这个有想过,还有一种是把$str1中的<a>都换成等长的相同字符,然后查询要替换的内容获取位置来操作原字符串。不过不是我想要的,希望通过正则解决
      

  4.   

    preg_replace('/(.*)<.*>.*<.*>(.*)/is',$str,$results);这个$results[1][0] 是<a...前面的
        $results[2][0] 是.../a>后面的
      

  5.   

    弄错了,不好意思
    用这个:
    preg_match("/(.*)<a\s*href=\".*\">.*<\/a>*(.*)/isu",$str,$results);
    echo $results[1]."<br>".$results[2]; $results[1]是前面的
    $results[2]是后面的
      

  6.   


    preg_match("/(.*)<a\s*href=\".*\">.*<\/a>*(.*)/isu",$str,$results);
    echo $results[1]."<br>".$results[2];