【发布时间】:2019-05-06 09:25:25
【问题描述】:
我想替换所有新行开头的所有空格。我有两个正则表达式替换:
$txt = preg_replace("/^ +/m", '', $txt);
$txt = preg_replace("/^[^\S\r\n]+/m", '', $txt);
它们中的每一个都匹配不同类型的空格。但是,可能有可能两个空格都存在并且顺序不同,所以我想在新行的开头匹配所有空格的出现。我该怎么做?
注意:第一个正则表达式匹配一个表意空间,\u3000 char,这只能在question raw body 中检查(所以渲染不做正确的工作在这里)。第二个正则表达式仅匹配 LF 和 CR 以外的 ASCII 空白字符。 Here is a demo 证明第二个正则表达式与第一个正则表达式匹配的内容不匹配。
【问题讨论】:
-
你只需要
^\h+。 -
@revo,谢谢,但是当我使用 ^\h+ 时,$txt 中的所有内容都会被替换。知道为什么吗?
-
试试
"/^\h+/mu"。你的第一个正则表达式匹配一个表意空间,所以你处理 Unicode 文本,u修饰符在这里可能很方便。 -
@WiktorStribiżew @revo 哦,我打错了一些东西。添加
u确实有效,谢谢! -
仅供参考,您的第二个正则表达式
^[^\S\r\n]+包括第一个正则表达式匹配的内容。这意味着第二个正则表达式可以满足您的所有需求,不需要u标志。
标签: php regex preg-replace