Извлеките любое вхождение строки Unicode в строку, используя preg_match

у меня такая струна

sample İletişim form:: aşağıdaki formu

Я стремлюсь извлечь строку, в которой есть символ unicode/non-ascii, используя preg_match или preg_match_all из php.

Так что я ожидаю результат только из 2 слов İletişim и aşağıdaki.

Array
(
    [0] => İletişim 
    [1] => aşağıdaki
)

Я просто не могу думать о регулярных выражениях, потому что я в этом не силен. Любая помощь приветствуется.

Большое спасибо.


person Kenneth Palaganas    schedule 05.06.2013    source источник


Ответы (2)


Я думаю, что начало решения, которое вы хотите, находится здесь: Как обнаружить ли символы, отличные от ASCII, в строке?

Используя preg_match(), вы можете сделать что-то вроде этого:

preg_match_all('/[^\s]*[^\x20-\x7f]+[^\s]*/', $string, $matches);
print_r($matches);

Или, без preg_match, вы можете использовать функцию mb_detect_encoding() для проверки кодировки строки. В вашем случае вы можете использовать его следующим образом:

$matches = array_filter(explode(' ', $string), function($item) {
    return !mb_detect_encoding($item, 'ASCII', TRUE);
});
print_r($matches);

Но последний немного перекошенный ^^

person Lebugg    schedule 05.06.2013
comment
Я проверил код, и он возвращает только символы, отличные от ascii, а не всю строку, содержащую этот символ. может быть, да, это может быть шагом к достижению того, чего я хочу. Все равно спасибо - person Kenneth Palaganas; 05.06.2013
comment
Я нашел тот, который хорошо работает. Попробуйте с preg_match_all(): '/[^\s]*[^\x20-\x7f]+[^\s]*/'; - person Lebugg; 05.06.2013

Вы можете использовать свойства Юникода:

$string = 'sample İletişim form:: aşağıdaki formu';
preg_match_all("/(\pL+)/u", $string, $matches); 
print_r($matches);

вывод:

Array
(
    [0] => Array
        (
            [0] => sample
            [1] => İletişim
            [2] => form
            [3] => aşağıdaki
            [4] => formu
        )

    [1] => Array
        (
            [0] => sample
            [1] => İletişim
            [2] => form
            [3] => aşağıdaki
            [4] => formu
        )

)
person Toto    schedule 05.06.2013
comment
Этот извлекает другие строки, на которых нет не-ascii. Но спасибо за участие. Ценить это :) - person Kenneth Palaganas; 05.06.2013