How to make replacement, only replacing once

Discussion in 'PHP' started by basketmen, Aug 26, 2011.

  1. #1
    Hi guys, below are custom code to replacing text into link, for example

    Google text, will be like this Google
    Yahoo text, will be like this Yahoo

    the replacement mod below are working well until now

    now i just need a little fix again, to make it better again
    i need it now only replacing once, so not too many links if the text appear few times

    please share your knowledge guys, how to do that





    $words = array(
    	'Google' => 'http://www.google.com',
    	'Yahoo' => 'http://www.yahoo.com'
    );
    
    $exp = array();
    $rplc = array();
    foreach ($words as $word => $url)
    {
    	$exp[] = '/ ' . preg_quote($word) . ' /i';
    	$rplc[] = ' <argh href="' . $url . '">' . $word . '</argh> ';
    }
    
    	$this->post['message'] = preg_replace($exp, $rplc, $this->post['message']);
    	$this->post['message'] = preg_replace_callback("#(<a [^>]*>)((?:[^<]|<(?!/?a>)|(?R))+)(</a>)#", create_function('$a', 'return $a[1] . preg_replace("#<argh[^>]*>(.*?)</argh>#", "$1", $a[2]) . $a[3];'), $this->post['message']);
    	$this->post['message'] = preg_replace(array('#<argh #', '#</argh>#'), array('<a ', '</a>'), $this->post['message']);
    
    PHP:
     
    Solved! View solution.
    basketmen, Aug 26, 2011 IP
  2. #2
    Try This:

    
    $this->post['message'] = preg_replace($exp, $rplc, $this->post['message'], 1);
    // I just added "1" in last. It will effect on first match
    
    Code (markup):
     
    HungryMinds, Aug 27, 2011 IP