Bug #61775 [Nab]: Preg_match does not support unicode.
Edit report at https://bugs.php.net/bug.php?id=61775&edit=1
ID: 61775
User updated by: asersz at gmail dot com
Reported by: asersz at gmail dot com
Summary: Preg_match does not support unicode.
Status: Not a bug
Type: Bug
Package: PCRE related
Operating System: MacOS Lion 10.7.2
PHP Version: 5.4.0
Block user comment: N
Private report: N
New Comment:
I will recompile my PCRE and PHP.
But I confirm my expression works fine in PHP 5.3.6.
This expression was default configuration for class CUrlManager in Yii framework.
After I upgrade my PHP 5.3.6 to 5.4.0, the warning was triggered.
Same bug reporting here:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=659478
Thanks :-D
Previous Comments:
------------------------------------------------------------------------
[2012-04-20 07:26:55] cataphract@php.net
Sorry, that was 5.3, but I can confirm it works with 5.4 too (PCRE version 8.12 2011-01-15).
------------------------------------------------------------------------
[2012-04-20 07:23:23] cataphract@php.net
Works here:
glopes@nebm:~/php/php-src$ php -v
PHP 5.3.10-dev (cli) (built: Feb 2 2012 11:31:13)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
glopes@nebm:~/php/php-src$ php
<?php
$r='/^(?P<foo>\w+)\/(?P<bar>\d+)\/$/u';
var_dump(preg_match($r,'test/3423/',$m), $m);
int(1)
array(5) {
[0]=>
string(10) "test/3423/"
["foo"]=>
string(4) "test"
[1]=>
string(4) "test"
["bar"]=>
string(4) "3423"
[2]=>
string(4) "3423"
}
I suspect that, if anything, this has been an PCRE change. Try recompiling PHP with the bundled PCRE
(--with-pcre-regex=BUNDLED, if I'm not mistaken).
------------------------------------------------------------------------
[2012-04-20 04:17:03] asersz at gmail dot com
Warning: preg_match(): Compilation failed: unknown option bit(s) set at offset 0
in /Users/zhangyowei/Web/lieqee/test.php on line 5
bool(false) NULL
Your expression trigger a warning too.
------------------------------------------------------------------------
[2012-04-20 03:11:57] asersz at gmail dot com
But this expression works fine in the PHP 5.3.x (and 5.2.x).
And works fine without the Modifier "u".
Why does not works fine in PHP 5.4?
------------------------------------------------------------------------
[2012-04-19 21:09:09] cataphract@php.net
Your expression is wrong. Version 8.02 of PCRE, which you're using, gives that rather cryptic
error, but more recent versions, including the one bundled with PHP say:
Warning: preg_match(): Compilation failed: unrecognized character after (?P at offset 4 in - on line
3
Probably you want something like:
<?php
$r='/^(?P<foo>\w+)\/(?P<bar>\d+)\/$/u';
var_dump(preg_match($r,'test/3423/',$m), $m);
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=61775
--
Edit this bug report at https://bugs.php.net/bug.php?id=61775&edit=1
Thread (7 messages)