php正则表达式未知空白



我很难弄清楚这个正则表达式匹配多个空格的情况:

$str = '   ';
if (preg_match_all('/s{2,}/', $str, $matches)) {
    var_dump($matches);
}

事实是,如果我用3个"真实"空格替换str值,它会按预期工作,但很明显str中的字符不是空白(从其他来源复制粘贴)!!但我需要匹配它们,用真正的空间/任何东西来代替它们。

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

中间字符是utf-8编码的非中断空间。将utf-8修饰符u添加到正则表达式中,它会很好地工作,例如/s{2,}/u

输出:

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

示例

\ s捕获的空白字符可能包括实空格(代码0x20)、水平制表符(0x09)、回车符(0x0D)、换行符(0x0A)和换行符(x0C)。因此,如果你想把所有这些字符变成真实的空间,你可以使用这行:

$str=preg_replace('/s/',' ',$str);

或者,如果您想用一个实际空间替换两个或多个空白字符的序列,请使用以下内容:

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

最新更新