Regular Expression differences between 4.4 and 5.2
| From: | Ewen Cumming | Date: | Fri, 12 Sep 2008 11:41:55 +0000 |
| Subject: | Regular Expression differences between 4.4 and 5.2 | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-279956@lists.php.net to get a copy of this message | ||
Hi everybody,
I'm trying to migrate our PHP code base to PHP5. For the most part the
transition hs been smooth however I'm really stuck on a regular expression
which gives different results in 4.4 and 5.2.
I've looked through migration guides but as far as I can see nothing should
have changed in Regex handling between the versions.
I've created the following script below to test the match:
<?php
include( 'input.inc' );
$pattern = "/<!T_([^> ]+)([^>]*)>(.*?)<!T_end\\1>|<!T_([^>
]+)([^>]*)>/si";
preg_match_all( $pattern, $string, $matches );
echo phpversion();
var_dump($matches);
?>
Input.inc contains the string that is giving the different results - its
probably to long to include so you can find it at
http://www.workingweb.nl/example/input.inc.
The results of this being run can be seen at:
PHP4 (desired result) - http://www.workingweb.nl/example/php4results
PHP5 - http://www.workingweb.nl/example/php5results
If the pattern modifier 's' is removed the regex behaves consistently again
(but this breaks other pages on our website so can't be used as a
workaround). Besides I don't see why that should make any difference.
Here is the version information from the PHP CLI versions I've been testing
with:
user@debian:~$ php4 -v
PHP 4.4.4-8+etch6 (cli) (built: May 16 2008 15:59:34)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
user@debian:~$ php5 -v
PHP 5.2.0-8+etch11 (cli) (built: May 10 2008 10:46:24)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies
Any help on this would be very appreciated.
Thanks,
Ewen