Hello Peter,

Hm... I see I need to specify what I'm really doing. Actually, I need
to change the letters in the text. It's a famous and ancient crypting
method: you divide the alphabet making two parts, then you change the
letters of one part with letters for other part (so A becomes N, B
becomes O, etc., and vice versa). it works fine and slightly with
strtr or str_replace... but only if the text is not in utf-8 and it
doesn't contain any non-English letters such as Cyrillic what I need.
What my regex does is the following: it sees an A, well it changes it
to N; then it goes through the string and sees an N... what does it
do? Surely, it changes it back to A! I hoped (in vain) that there
exists a modifier preventing this behavior... but it seems that it's
With best regards from Ukraine,
Skype: Francophile; Wlm&MSN: arthaelon @ yandex.ru; Jabber: arthaelon @ 
Yahoo! messenger: andre.polykanine; ICQ: 191749952
Twitter: m_elensule

----- Original message -----
From: Peter Lind <peter.e.l...@gmail.com>
To: Andre Polykanine <an...@oire.org>
Date: Tuesday, May 18, 2010, 10:19:51 AM
Subject: [PHP] preg_replace: avoiding double replacements

On 18 May 2010 09:04, Andre Polykanine <an...@oire.org> wrote:


> 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!

Use better regexes: either match for word endings or use a delimiter
in your markers (i.e. ###BOLD### instead of BOLD).


WWW: http://plphp.dk / http://plind.dk
LinkedIn: http://www.linkedin.com/in/plind
Flickr: http://www.flickr.com/photos/fake51
BeWelcome: Fake51
Couchsurfing: Fake51

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

Reply via email to