$str = '<a href="http://www.abc.com/"> <a href="http://www.abc.com/"> <a href="http://www.abc.com/">提问的智慧 </a> </a> </a>';
$rx = "/<a\s+[^<]*?>[^<]*?<\\/a>/i";
preg_match($rx, $str, $matches);
var_export($matches);

解决方案 »

  1.   

    前面<>里面也是不一定是什么。就是要判断,重复多个相同的,只保留一个。
      

  2.   

    $str="<a href=\"http://www.abc.com/\"><a href=\"http://www.abc.com/\"> <a href=\"http://www.abc.com/\">提问的智慧 </a> </a> </a> "; 
    $str =  preg_replace('/<a\s+href\s*=\s*[\"|\'](.+?)[\"|\']>.+?([^<\/a>]+)(\s*<\/a>\s*)+/is', '<a href="$1">$2</a>' ,$str); 
    echo $str;
      

  3.   

    <div class='cat'><div class='cat'><div class='cat'>提问的智慧</div></div></div> 
    <>也可能是这种,嵌套的东西和个数都不一定,但肯定是一一对应的。
      

  4.   

    没想到好办法,找高手吧.
    笨方法就是分别给标签写正则,然后放到数组里.
    用preg_match($arrPattern, $arrReplace, $str);
      

  5.   


    $str='<a href="http://www.abc.com/"> <a href="http://www.abc.com/"> <a href="http://www.abc.com/">提问的滋味 </a> </a> </a>';
    $str1='<a href="http://www.abc.com/"> <a href="http://www.abc.com/">提问的滋味 </a> </a>';
    $str2='<a href="http://www.abc.com/"> <a href="http://www.abc.com/">提问的滋味 </a> </a>';
    preg_match_all('/<a .*>[\x80-\xff]+ <\/a>/',$str1,$array);
    preg_match_all('/<a .*>[\x80-\xff]+ <\/a>/',$str2,$array2);
    preg_match_all('/<a .*>[\x80-\xff]+ <\/a>/',$str3,$array3);
    print_r($array);
    print_r($array2);
    print_r($array3);
      

  6.   

    http://www.x2blog.cn/Maxwin/#sid.17788/page.2/
      

  7.   

    <a href="http://www.abc.com/">提问的智慧 </a> </a> </a> 或者只匹配中间不是英文的或不含<标签的链接
    试试
    <a.*?>[^\<\>]*?</a>
      

  8.   

    此正则表达式,要求第一层和第二层以及N层的标签必须前后匹配.中间可以有任何空白字符,包括空格、制表符、换页符.
    不知道能否满足你的要求.
    $str="<a href='http://www.abc.com/'> <a href='http://www.abc.com/'> <a href='http://www.abc.com/'>提问的智慧 </a></a></a><div class='cat'><div class='cat'><div class='cat'>提问的智慧</div></div></div><script><script>asfasdf</script></script>"; 
    $re = "/(\s*<[^<>]*>\s*)+(.*?)(<\/\w+>)+/is";
    echo preg_replace($re, '$1$2$3', $str);
    仔细看了一下递归深度匹配,但能力有限,没有找出如何匹配中间内容的方法.$re = "#<([a-z]+) ([^ >]+)[^<>]*>([^<>]|(?R))*</[^<>]+>#is";
    preg_match_all($re,$str,$matches);
    var_dump($matches); 上面结果为:<a href='http://www.abc.com/'>提问的智慧 </a><div class='cat'>提问的智慧</div><script>asfasdf</script>array(4) {
      [0]=>
      array(2) {
        [0]=>
        string(144) "<a href='http://www.abc.com/'>                              <a href='http://www.abc.com/'> <a href='http://www.abc.com/'>提问的智慧 </a></a></a>"
        [1]=>
        string(79) "<div class='cat'><div class='cat'><div class='cat'>提问的智慧</div></div></div>"
      }
      [1]=>
      array(2) {
        [0]=>
        string(1) "a"
        [1]=>
        string(3) "div"
      }
      [2]=>
      array(2) {
        [0]=>
        string(26) "href='http://www.abc.com/'"
        [1]=>
        string(11) "class='cat'"
      }
      [3]=>
      array(2) {
        [0]=>
        string(80) "<a href='http://www.abc.com/'> <a href='http://www.abc.com/'>提问的智慧 </a></a>"
        [1]=>
        string(56) "<div class='cat'><div class='cat'>提问的智慧</div></div>"
      }
    }