Thanks, I don't know how I overlooked the preg_replace_callback function. That's exactly what I needed.
Thaddeus
CPT John W. Holmes wrote:
From: "Thaddeus J. Quintin" <[EMAIL PROTECTED]>
I'm looking to replace the 'nth' instance of an expression within a
string.
Example (very simple)-
$string="My mom can beat up your mom and your mom's dog"; $pattern="mom"; $replacement="dad";
I want to be able to replace any particular instance of the pattern within that string. I was getting ready to do it in a very complex manner by finding all the matches, splitting on the pattern, and then breaking the string down and reassembling it in the proper order. It seems like there might be an easier way to perform this though.
Anyone have any suggestions?
Probably lots of way to do this... here's my suggestion:
<?php
//Original String $str = 'a b c d a b c d a b c d a b c d a b c d'; //Replacement String $replacement_string = "ff";
//Instances of search string you want replaced //i.e. 2nd and 4th instance is array(2,4) $instance = array(2,4);
//Callback function that manages replacements function callback($matches) { //Global and static variables. $match_count is //static to keep track of what match were currently //operating on global $replacement_string; global $instance; static $match_count = 1;
//determine if current count is in $instance array. //if it is, set return value to replacement string, //otherwise return matched value unchanged if(in_array($match_count,$instance)) { $retval = $replacement_string; } else { $retval = $matches[0]; }
//increment match count $match_count++;
//return replacement string return $retval; }
//replace all 'a' characters with $replacement_str (simple example) $new_str = preg_replace_callback('/a/','callback',$str);
echo $str . '<hr>' . $new_str;
?>
---John Holmes...
-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php