Re: preg_replace does not replace all occurrences

From: Date: Tue, 15 Mar 2011 10:34:32 +0000
Subject: Re: preg_replace does not replace all occurrences
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-51694@lists.php.net to get a copy of this message
On 15 March 2011 10:32, Richard Quadling <rquadling@gmail.com> wrote: > On 14 March 2011 20:36, Hannes Landeholm <landeholm@gmail.com> wrote: >> What is more likely to be wrong? Your understanding of a specific >> regex pattern (which happens to be full of escapes making it >> incredibly hard to read) or the implementation of preg_replace? >> >> ~Hannes >> >> On 14 March 2011 16:18, Martin Scotta <martinscotta@gmail.com> wrote: >>> >>> I chose the simplest example to show the preg_replace behavior, there are >>> better (and safer) ways to scape slash characters. >>> Anyways, *is this the expected preg_replace behavior?* >>> >>>  Martin >>> >>> <?php >>> function test($str) { >>>    static $re = '/(^|[^\\\\])\'/'; >>>    static $change = '$1\\\''; >>> >>>    echo $str, PHP_EOL, >>>        preg_replace($re, $change, $str), PHP_EOL, PHP_EOL; >>> } >>> >>> test("str '' str"); // bug? >>> test("str \\'\\' str"); // ok >>> test("'str'"); // ok >>> test("\'str\'"); // ok >>> >>> ---- >>> Expected: >>> >>> str '' str >>> str \'\' str >>> >>> str \'\' str >>> str \'\' str >>> >>> 'str' >>> \'str\' >>> >>> \'str\' >>> \'str\' >>> >>> ---- >>> Result: >>> >>> str '' str >>> str \'' str >>> >>> str \'\' str >>> str \'\' str >>> >>> 'str' >>> \'str\' >>> >>> \'str\' >>> \'str\' >>> >>> >>>  Martin Scotta >> >> -- >> PHP Internals - PHP Runtime Development Mailing List >> To unsubscribe, visit: http://www.php.net/unsub.php >> >> > > Did no one see why the regex was wrong? > > RegexBuddy (a windows app) explains regexes VERY VERY well. The important bit (where the problem lies with regard to the regex) is ... Match a single character NOT present in the list below «[^\\\\]» A \ character «\\» A \ character «\\» The issue is the word _single_. -- Richard Quadling Twitter : EE : Zend @RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY

« previous php.internals (#51694) next »