我想替换所有新行开头的所有空白。我有两个正则表达式替代品:
$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证明第二个正则表达式与第一个正则表达式不匹配。
答案 0 :(得分:1)
由于您要从Unicode字符串中删除任何水平空格,因此需要使用
\h
regex escape(“任何水平空白字符(自PHP 5.2.4起)” )u
修饰符(请参阅Pattern Modifiers)使用
$txt = preg_replace("/^\h+/mu", '', $txt);
详细信息
^
-行的开头(m
修饰符使^
匹配所有行的起始位置,而不仅仅是字符串的起始位置)\h+
-一个或多个水平空白u
修饰符将确保Unicode文本被视为Unicode代码点的序列,而不仅仅是代码单元,并且将使所有正则表达式转义为Unicode模式。