2010-05-10 58 views
0

我有一個問題,當我試圖找到下面的代碼的某些字符的正則表達式:問題與一些特殊的parttern

$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表達不太熟悉,對這個錯誤一無所知。我該如何解決這個問題?謝謝。

回答

6

問題是,PCRE正則表達式引擎不理解\uXXXX -syntax來通過它們的unicode代碼點表示字符。取而代之的是PCRE引擎使用\x{XXXX} -syntax與u -modifier組合:

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 -modifier(見箭頭上面)?如果是這樣,你必須檢查你的PHP是否支持u-modifier(Unix上的PHP> 4.1.0和Windows上的4.2.3)。

+0

謝謝,錯誤已經消失了。但是結果變成了一個空數組,可能是什麼錯誤?我添加了輸入變量'$ str'。 – Young 2010-05-10 13:48:52

+0

u're正確.i使代碼運行在我的燈上而不是wamp,它工作正常:) – Young 2010-05-10 14:35:28