On 15 March 2011 10:32, Richard Quadling <rquadl...@gmail.com> wrote:
> On 14 March 2011 20:36, Hannes Landeholm <landeh...@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 <martinsco...@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

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to