PHP preg_match使卷曲撇号与其他类型的卷曲引号不匹配。怎么避免?

时间:2014-12-03 05:06:48

标签: php regex unicode

我有以下变量内容:

$content_content = '“I can’t do it, she said.”';

我想为每个“单词”做一个preg_match,包括收缩,所以我使用preg_match如下:

 if (preg_match_all('/([a-zA-Z0-9’]+)/', $content_content, $matches))
 {
    echo '<pre>';
    print_r($matches);
    echo '</pre>';
 }

但是,似乎通过在正则表达式中包含',它也会捕获卷曲的双引号,如上面的命令输出:

Array
(
    [0] => Array
        (
            [0] => ��
            [1] => I
            [2] => can’t
            [3] => do
            [4] => it
            [5] => she
            [6] => said
            [7] => ��
        )

    [1] => Array
        (
            [0] => ��
            [1] => I
            [2] => can’t
            [3] => do
            [4] => it
            [5] => she
            [6] => said
            [7] => ��
        )

)

我怎样才能包括'没有它'还包括“和”?

1 个答案:

答案 0 :(得分:8)

这是因为&#34;幻想&#34;你在字符集中使用的撇号是以二进制形式处理的;您需要使用各自的modifier

启用Unicode模式
preg_match_all('/([a-zA-Z0-9’]+)/u', $content_content, $matches)

Demo