在PHP的多行字符串中,在每行的开头匹配任何水平空格字符

时间:2019-05-06 09:25:26

标签: php regex preg-replace

我想替换所有新行开头的所有空白。我有两个正则表达式替代品:

$txt = preg_replace("/^ +/m", '', $txt);
$txt = preg_replace("/^[^\S\r\n]+/m", '', $txt);

它们每个都匹配不同种类的空白。但是,可能有两个空白空间都存在并且以不同的顺序排列,所以我想在新行的开头匹配所有空白空间的出现。我该怎么办?

注意:第一个正则表达式匹配表意空间 \u3000字符,只能将question raw body签入(SO渲染在这里没有做正确的工作)。第二个正则表达式仅匹配LF和CR以外的ASCII空白字符。 Here is a demo证明第二个正则表达式与第一个正则表达式不匹配。

1 个答案:

答案 0 :(得分:1)

由于您要从Unicode字符串中删除任何水平空格,因此需要使用

使用

$txt = preg_replace("/^\h+/mu", '', $txt);

详细信息

  • ^-行的开头(m修饰符使^匹配所有行的起始位置,而不仅仅是字符串的起始位置)
  • \h+-一个或多个水平空白
  • u修饰符将确保Unicode文本被视为Unicode代码点的序列,而不仅仅是代码单元,并且将使所有正则表达式转义为Unicode模式。