使用preg_match提取字符串中的任何unicode字符串出现

时间:2013-06-05 08:53:11

标签: php preg-match preg-match-all

我有这种字符串

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

我的目标是使用preg_match或preg_match_all的php提取其中包含unicode / non-ascii字符的字符串。

所以我只期待2 İletişimaşağıdaki字的结果。

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

我无法想到正则表达,因为我不擅长它。 欢迎任何帮助。

非常感谢你。

2 个答案:

答案 0 :(得分:1)

我认为你想要的解决方案的开始就在这里:How do I detect non-ASCII characters in a string?

通过使用preg_match(),你可以像这样做smthg:

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);

但最后一个有点扭曲^^

答案 1 :(得分:1)

您可以使用unicode属性:

$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
        )

)