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

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


$txt = preg_replace("/^ +/m", '', $txt);

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

它们中的每一个都匹配不同类型的空白空间。但是,可能有两个空格都存在且顺序不同,因此我想在新行的开头匹配所有空格的出现。我怎样才能做到这一点?


注意:第一个正则表达式匹配一个表意空间,\u3000char,它只能检查问题原始正文(所以渲染在这里没有做正确的工作)。第二个正则表达式仅匹配 LF 和 CR 以外的 ASCII 空白字符。这是一个演示,证明第二个正则表达式与第一个正则表达式匹配的内容不匹配。


慕桂英4014372
浏览 195回答 1
1回答

杨魅力

由于您想从需要使用的 Unicode 字符串中删除任何水平空格\h 正则表达式转义(“任何水平空白字符(自 PHP 5.2.4 起)”)u修饰符(参见模式修饰符)用$txt = preg_replace("/^\h+/mu", '', $txt);细节^-一行的开始(m修饰符^匹配所有行的起始位置,而不仅仅是字符串的起始位置)\h+ - 一个或多个水平空白u 修饰符将确保 Unicode 文本被视为 Unicode 代码点序列,而不仅仅是代码单元,并使模式 Unicode 中的所有正则表达式转义都能识别。
打开App,查看更多内容
随时随地看视频慕课网APP