Hello Jim, That might work for that particular example, but I have utf-8 strings containing different characters of different alphabets, so neither str_replace nor strtr work... Thanks! -- With best regards from Ukraine, Andre Skype: Francophile; Wlm&MSN: arthaelon @ yandex.ru; Jabber: arthaelon @ jabber.org Yahoo! messenger: andre.polykanine; ICQ: 191749952 Twitter: m_elensule ----- Original message ----- From: Jim Lucas <lists@xxxxxxxxx> To: Andre Polykanine <andre@xxxxxxxx> Date: Tuesday, May 18, 2010, 3:33:09 AM Subject: preg_replace: avoiding double replacements 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 -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php