Re: preg_replace does not replace all occurrences
| From: | Hannes Landeholm | Date: | Mon, 14 Mar 2011 20:36:34 +0000 |
| Subject: | Re: preg_replace does not replace all occurrences | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-51688@lists.php.net to get a copy of this message | ||
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