Re: Negative Look Ahead Regex - Code Mistake or Bug?

From: Date: Tue, 19 Aug 2008 08:18:41 +0000
Subject: Re: Negative Look Ahead Regex - Code Mistake or Bug?
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-278295@lists.php.net to get a copy of this message
Cameron B. Prince schreef:
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.
1. you really shouldn't be stuffing session IDs into URLs (but you may not have that choice) 2. you should let php take care of this by activating the ini setting session.use_trans_sid (but you may have reasons not to)
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


« previous php.general (#278295) next »