代码之家  ›  专栏  ›  技术社区  ›  Young

某些特殊parttern的正则表达式问题

  •  0
  • Young  · 技术社区  · 16 年前

    当我试图查找具有以下代码的字符时遇到问题:

    $str = "统计类型目前分为0日Q统计,月统q计及287年7统1计三7种,如需63自定义时间段,点1击此hell处进入自o定w义统or计d!页面。其他统计:客服工作量统计 | 本周服务统计EXCEL";
    preg_match_all('/[\w\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A]/',$str,$match); //line 5
    print_r($match);
    

    我的错误如下:

    Warning: preg_match_all() [function.preg-match-all]: Compilation failed: PCRE does not  support \L, \l, \N, \U, or \u at offset 4 in E:\mycake\app\webroot\re.php on line 5
    

    我对Reg表达式不太熟悉,也不知道这个错误。我该如何解决这个问题?谢谢。

    1 回复  |  直到 16 年前
        1
  •  6
  •   Community Mohan Dere    9 年前

    问题是,PCRE正则表达式引擎不理解 \uXXXX -通过其Unicode码位表示字符的语法。相反,PCRE引擎使用 \x{XXXX} -语法与 u -修改人:

    preg_match_all('/[\w\x{FF10}-\x{FF19}\x{FF21}-\x{FF3A}\x{FF41}-\x{FF5A}]/u',$str,$match); 
    print_r($match);
    

    看看我的答案 here 更多信息。

    编辑:

    $str = "统计类型目前分为0日Q统计,月统q计及287年7统1计三7种,如需63自定义时间段,点1击此hell处进入自o定w义统or计d!页面。其他统计:客服工作量统计 | 本周服务统计EXCEL";
    preg_match_all('/[\w\x{FF10}-\x{FF19}\x{FF21}-\x{FF3A}\x{FF41}-\x{FF5A}]/u',$str,$match);
    //                                                                       ^
    //                                                                       |
    print_r($match);
    /* Array
    (
        [0] => Array
            (
                [0] => 0
                [1] => Q
                [2] => q
                [3] => 2
                [4] => 8
                [5] => 7
                [6] => 7
                [7] => 1
                [8] => 7
                [9] => 6
                [10] => 3
                [11] => 1
                [12] => h
                [13] => e
                [14] => l
                [15] => l
                [16] => o
                [17] => w
                [18] => o
                [19] => r
                [20] => d
                [21] => E
                [22] => X
                [23] => C
                [24] => E
                [25] => L
            )
    
    ) */
    

    你肯定,你用了 U -修饰符(见上图箭头)?如果是这样,您必须检查您的PHP是否支持 U -修饰符(在Unix上为php>4.1.0,在Windows上为php>4.2.3)。

    推荐文章