php正则表达式未知空格

php正则表达式未知空格,php,regex,Php,Regex,我很难弄清楚这个regexp如何匹配多个空格: $str = '   '; if (preg_match_all('/\s{2,}/', $str, $matches)) { var_dump($matches); } 事实是,如果我将str值替换为3个“实”空格,它将按预期工作,但str中的字符显然不是空白(从其他源复制粘贴)!!但我需要匹配它们,用真实的空间/任何东西替换它们 我的问题:str中那些看起来像空格的简单字符是什么?更重要的是,如何在regexp中定位它们?中间的字符

我很难弄清楚这个regexp如何匹配多个空格:

$str = '   ';

if (preg_match_all('/\s{2,}/', $str, $matches)) {
    var_dump($matches);
}
事实是,如果我将str值替换为3个“实”空格,它将按预期工作,但str中的字符显然不是空白(从其他源复制粘贴)!!但我需要匹配它们,用真实的空间/任何东西替换它们


我的问题:str中那些看起来像空格的简单字符是什么?更重要的是,如何在regexp中定位它们?

中间的字符是utf-8编码的不间断空格。添加到您的正则表达式中,它将正常工作,例如
/\s{2,}/u

产出:

array(1) {
  [0]=>
  array(1) {
    [0]=>
    string(4) "   "
  }
}

中间字符是utf-8编码的不间断空格。添加到您的正则表达式中,它将正常工作,例如
/\s{2,}/u

产出:

array(1) {
  [0]=>
  array(1) {
    [0]=>
    string(4) "   "
  }
}

由\s捕获的空白字符可能包括实空格(代码0x20)、水平制表符(0x09)、回车符(0x0D)、换行符(0x0A)和换行符(0x0C)。因此,如果要将所有这些字符转换为实空格,可以使用以下行:

$str=preg_replace('/\s/',' ',$str);
或者,如果要将两个或多个空格字符的序列替换为一个实空格,请使用以下方法:

$str=preg_replace('/\s{2,}/',' ',$str);

由\s捕获的空白字符可能包括实空格(代码0x20)、水平制表符(0x09)、回车符(0x0D)、换行符(0x0A)和换行符(0x0C)。因此,如果要将所有这些字符转换为实空格,可以使用以下行:

$str=preg_replace('/\s/',' ',$str);
或者,如果要将两个或多个空格字符的序列替换为一个实空格,请使用以下方法:

$str=preg_replace('/\s{2,}/',' ',$str);

请把问题改写成可以回答的形式。请把问题改写成可以回答的形式。