【问题标题】:php regex unknown whitespacephp正则表达式未知空格
【发布时间】:2016-04-30 11:58:22
【问题描述】:

我很难弄清楚这个正则表达式发生了什么来匹配多个空格:

$str = '   ';

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

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

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

【问题讨论】:

  • 请重新表述问题以便回答。

标签: php regex


【解决方案1】:

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

输出:

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

Example

【讨论】:

    【解决方案2】:

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

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

    或者,如果您想用一个实空格替换两个或多个空格字符的序列,请改用:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      相关资源
      最近更新 更多