Re: Re: Negative Look Ahead Regex - Code Mistake or Bug?
| From: | Cameron B. Prince | Date: | Mon, 18 Aug 2008 14:42:29 +0000 |
| Subject: | Re: Re: Negative Look Ahead Regex - Code Mistake or Bug? | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-278284@lists.php.net to get a copy of this message | ||
Hi Al,
I am using preg_quote in the live code. I omitted it from the example code
to simplify the example.
Thanks,
Cameron
On 8/18/08 8:31 AM, "Al" <news@ridersite.org> wrote:
> Run your pattern thru preg_quote() prior to using it in your preg_replace().
> Don't backslash
> anything yourself, let preg_quote() do it.
>
> Cameron B. Prince wrote:
>> Hello,
>>
>> I¹ve run into a problem with a regex and need help determining if this is my
>> mistake or a bug. The regex is for inserting a SID into every link in the
>> buffer before it¹s flushed, but only when each link doesn¹t already have a
>> SID.
>>
>> An example of the code is here:
>>
>> $buffer =
>> preg_replace('/"http\:\/\/www\.domain\.com([\/\w\.-]*)(?!\?PHPSESSID\=2u0cca
>> ffoh6jaeapkke35qpp87;?)/',
>>
>> '"http://www.domain.com$1?PHPSESSID=t9gksvpdcuobsnqt98qloe6lg4;',
>> $buffer);
>>
>> The code works correctly in most cases except when a SID already exists and
>> there is a path after the .com such as:
>>
>>
>> http://www.domain.com/path1/path2.php?PHPSESSID=2u0ccaffoh6jaeapkke35qpp87;
>>
>> When this URL is processed by the regex, it becomes:
>>
>>
>> http://www.domain.com/path1/path2.ph?PHPSESSID=t9gksvpdcuobsnqt98qloe6lg4;p?
>> PHPSESSID=2u0ccaffoh6jaeapkke35qpp87;
>>
>>
>> So the problem is the regex not only falsely matches, it's inserting the SID
>> in between 2nd and 3rd letters of the extension.
>>
>> You can see the code in action here:
>>
>> http://kottmann.com/test.php
>>
>> The full source for the test code is also available when viewing the source
>> of this page.
>>
>> I've tested this on PHP v5.1.6 and PHP v5.2.6.
>>
>> TIA,
>> Cameron
>>
>>
>>
>>
>>
>>
>>