Re: preg_replace: avoiding double replacements

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Andre Polykanine wrote:
> Hello everyone,
> 
> Sorry for bothering you again.
> Today I met a problem exactly described by a developer in users' notes
> that follow the preg_replace description in the manual:
> info at gratisrijden dot nl
> 02-Oct-2009 02:48 
> if you are using the preg_replace with arrays, the replacements will apply as subject for the patterns later in the array. This means replaced values can
> be replaced again.
> 
> Example:
> <?php
> $text = 
> 'We want to replace BOLD with the <boldtag> and OLDTAG with the <newtag>';
> 
> $patterns 
> = array(
> '/BOLD/i', 
> '/OLDTAG/i');
> $replacements 
> = array(
> '<boldtag>', 
> '<newtag>');
> 
> echo preg_replace 
> ($patterns, $replacements, $text);
> ?>
> 
> Output:
> We want to replace <b<newtag>> with the <<b<newtag>>tag> and <newtag> with the <newtag>
> 
> Look what happend with BOLD. 
> 
> Is there any solution to this besides any two-step sophisticated trick
> like case changing?
> Thanks!
> 
> --
> With best regards from Ukraine,
> Andre
> Http://oire.org/ - The Fantasy blogs of Oire
> Skype: Francophile; Wlm&MSN: arthaelon @ yandex.ru; Jabber: arthaelon @ jabber.org
> Yahoo! messenger: andre.polykanine; ICQ: 191749952
> Twitter: http://twitter.com/m_elensule
> 
> 

Well, for the example you gave, why use regex?  Check this out as an example.

<plaintext><?php
$text = 'We want to replace BOLD with the <boldtag> and OLDTAG with the <newtag>';

$regex = array(
		'/BOLD/i',
		'/OLDTAG/i',
		);
$oldtags = array(
		'BOLD',
		'OLDTAG',
		);
$replacements = array(
		'<boldtag>',
		'<newtag>',
		);

# Original String
echo $text."\n";

# After regex is applied
echo preg_replace($regex, $replacements, $text)."\n";

# After plain tag replacement happens
echo str_replace($oldtags, $replacements, $text)."\n";

?>

See if that works for you.

-- 
Jim Lucas

   "Some men are born to greatness, some achieve greatness,
       and some have greatness thrust upon them."

Twelfth Night, Act II, Scene V
    by William Shakespeare

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux