我很难弄清楚这个正则表达式匹配多个空格的情况:
$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);