说了半天, 没有听明白你要问的问题..1 只替换一个
看手册
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit [, int &$count ]] )$limit 参数.
$count 参数.
仔细看看这两个参数是干什么的.2 为空.倒底是文章内容?还是SQL 记录???
被你迷糊打败了......为空这种过滤...你如果知道点SQL语句的知识,应该不会有这样的问题.
看你下面的代码,,如果是你写的,那你应该不会问出上面的两个问题.如果不是你写的. 还是那句话, 学习基础吧.把基础打牢了,再开始写代码...

解决方案 »

  1.   

    例子就是这样的
    我添加一篇文章
    名称"正则替换"
    内容"请高手帮忙~正则替换的一个问题,谢谢了"
    关键字"正则 替换 高手 帮忙"
    -----------------------------
    后台管理关键字
    aid keyword rank sta rpurl
    1   正则     10   30  http://csdn.net/------------------------------
    现在就是只有后台有正则这个关键字,而且 这个关键字所对应的rpurl不等于空时
    文章正文的'正则'这个字才会替换成带链接的'正则'(<a href="http://csdn.net/">正则</a>),而且文中所有的'正则'字都会被替换我想做的就是
    直接把表里的 rpurl不等于空的所有记录读出来
    而且只要文章中存在rpurl对应的关键字(keyword)就替换掉,但是只替换第一次出现的(而且本身带连接的不替换)
    ---------
    这个不是我写的啊 我是修改 急用 麻烦帮忙啊!~
      

  2.   

    这个替换最好是在客户端完成。避免服务器资源大量消耗。<!--<?php
    $keywordList = array(
    array('id' => 1 , 'word' => '正则','url' =>'http://csdn.net'),
    array('id' => 2 , 'word' => '示例','url' =>'http://163.com'),
    array('id' => 3 , 'word' => '特殊字符示例)','url' =>'http://162.com')
    );
    $jsKeywords = json_encode($keywordList);
    ?>-->
    <body>
    <div id="myContent">
    这是一段文字,其中包含了正则这个词,并包含一个存在于链接中的<a href="http://google.com">正则</a>,<br>
    这里正则这个词将会第二次出现。<br>
    这里正则这个词将会第三次出现。<br>
    这是一段文字,其中包含了示例这个词,并包含一个存在于链接中的<a href="http://google.com">示例</a>,<br>
    这里示例这个词将会第二次出现。<br>
    特殊字符示例)
    </div>
    </body>
    <script type="text/javascript">
    var _contentEl = document.getElementById("myContent");
    var _contentHTML = _contentEl.innerHTML;
    var _replaceCount = 2; // 允许替换的次数
    var _re;
    var _word;
    var _url;
    var _re;
    //var _keywordList = <?php echo $jsKeywords; ?>;
    var _keywordList = [{"id":1,"word":"\u6b63\u5219","url":"http:\/\/csdn.net"},{"id":2,"word":"\u793a\u4f8b","url":"http:\/\/163.com"},{"id":3,"word":"\u7279\u6b8a\u5b57\u7b26\u793a\u4f8b)","url":"http:\/\/162.com"}];
    var _replaced = new Array();
    String.prototype.inArray = function(_array)
    {
    var _replaced = 0;
    for(key in _array)
    {
    if (_array[key] == this)
    {
    _replaced += 1;
    }
    }
    if (_replaced > _replaceCount)
    {
    return true;
    }
    return false;
    };
    var _need;
    var _reM = new RegExp("(\\\$|\\\(|\\\)|\\\*|\\\+|\\\-|\\\[|\\\]|\\\\|\\\^|\\\{|\\\}|\\\|)","ig");
    for(key in _keywordList)
    {
    word = _keywordList[key];
    _word = word.word;
    _url = word.url;
    if (_word.length > 0 && _url.length > 0)
    {
    _word = _word.replace(_reM,"\\$1");
    _re = new RegExp("((<a)?[^<\\/a]*)("+_word+")","ig");
    _contentHTML = _contentHTML.replace(_re,function($0,$1,$2,$3) {
    if (typeof($3) == "string")
    {
    _need = $3;
    if (!_need.inArray(_replaced))
    {
    _replaced.push(_need);
    return $1+"<a href="+_url+">"+$3+"</a>";
    }
    }
    return $1+$3;
    }
    );
    }
    }
    _contentEl.innerHTML = _contentHTML;
    </script>
    即时写的,乱了点。自己可以整理一下。
      

  3.   


    var mySorter = function(a,b){
    if (a["word"].length == b["word"].length)
    {
    return 0;
    }
    return (a["word"].length > b["word"].length)?-1:1;
    }
    _keywordList = _keywordList.sort(mySorter);
    var _replaced = new Array();在定义keywordList的语句后加上这条就可以了。
      

  4.   

    幸福。Php晋级群:39103746 ,附言:Csdn
      

  5.   

    其实你只需要把每个preg_replace()正则替换的limit的参数设为1就可以了。
    如:$string = preg_replace('/(^ ¦>)([^ <]+)(?= < ¦$)/sUe', "highlight('\\2',\$word, '', '\\1', 'me')", $string,1);