2015-06-11 144 views
3

PHP正則表達式查找所有大寫單詞串:PHP正則表達式查找所有大寫的串詞

$string = "test sample test: 2015. ŽYDRŪNAS PAVARDENIS"; 

preg_match_all('/\b([A-Z-][\p{L}\pL]+)\b/', $string, $matches); 

var_dump($matches); 

輸出:

array(2) { 
    [0]=> 
    array(2) { 
    [0]=> 
    string(8) "YDRŪNAS" 
    [1]=> 
    string(10) "PAVARDENIS" 
    } 
    [1]=> 
    array(2) { 
    [0]=> 
    string(8) "YDRŪNAS" 
    [1]=> 
    string(10) "PAVARDENIS" 
    } 
} 

問題是在哪裏disapear符號 'Ž'?

若要修改regex expresion,那將不會刪除UTF-8符號?

碼在線:Code

+0

嘗試閉合'/'分隔符之後將所述'u'改性劑。 – Franz

+1

'Ž'沒有被捕獲,因爲你的regex指定匹配必須以'A'和'Z'或破折號('-')之間的大寫字母開始。更多的,'\ p {L}'與'\ pL'(你可以使用它們中的任何一個)相同,它包含小寫字母。 – axiac

回答

5

基本上你需要使用modifier u選項使用Unicode字符串時。然而,正則表達式也可以使用:upper: character class進行簡化,因爲它將匹配所有大寫Unicode字符。

像這樣:

$string = "test sample test: 2015. ŽYDRŪNAS PAVARDENIS"; 

preg_match_all("/[[:upper:]]+/u", $string, $matches); 
var_dump($matches); 

輸出:

array(1) { 
    [0]=> 
    array(2) { 
    [0]=> 
    string(10) "ŽYDRŪNAS" 
    [1]=> 
    string(10) "PAVARDENIS" 
    } 
} 

Demo

+0

@ Rizier123很好的編輯!我還在搜索「u」選項文檔的鏈接。你快了!同樣有趣的是,它僅適用於PHP> = 5.3。我本來預計該功能也可以在早期的PHP版本中使用。 – hek2mgl

+0

沒有太多的編輯,答案已經很好:) – Rizier123

相關問題