2015-06-11 4 views
3

PHP Regex найти все слова прописных букв в строке:PHP Regex найти все слова прописные буквы в строке

$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 символа 'Ž'?

HOw to modify regex expresion, который не будет удален UTF-8 символы?

Код онлайн: Code

+0

Try добавление 'u' модификатор после закрытия'/'разделителем. – Franz

+1

'Ž' не записывается, потому что ваше регулярное выражение указывает, что совпадение должно начинаться с буквы верхнего регистра между' A' и 'Z' или тире (' -'). Более того, '\ p {L}' эквивалентен '\ pL' (вы можете использовать любой из них), и он содержит строчные буквы. – axiac

ответ

5

В основном вам нужно использовать опцию modifier u при работе с юникод строками. Однако регулярное выражение также может быть упрощено с использованием :upper: character class, поскольку оно будет соответствовать всем символам юникода с верхним регистром.

Как это:

$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

Смежные вопросы