Edit report at https://bugs.php.net/bug.php?id=61775&edit=1

 ID:                 61775
 Updated by:         cataphr...@php.net
 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:

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).


Previous Comments:
------------------------------------------------------------------------
[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] cataphr...@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);

------------------------------------------------------------------------
[2012-04-19 17:07:44] asersz at gmail dot com

Description:
------------
I am not good at english.

A warning: preg_match(): Compilation failed: unknown option bit(s) set at 
offset 
0

OS: MacOSX Lion 10.7.2
Web Server: apache 2
PHP : 5.4.0
PCRE (Perl Compatible Regular Expressions) Support: enabled
PCRE Library Version: 8.02 2010-03-19

By the way: the php 5.4.0 released is stable or not ?

thanks.

Test script:
---------------
<?php
$r='/^(?P\w+)\/(?P\d+)\/$/u';
var_dump(preg_match($r,'test'));

Expected result:
----------------
What does the warning mean ?

The preg_match should be return 0 without warnings.

Actual result:
--------------
Warning: preg_match(): Compilation failed: unknown option bit(s) set at offset 
0 
in /Users/zhangyowei/Web/lieqee/test.php on line 4
bool(false)


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=61775&edit=1

Reply via email to