正则表达式删除空行,但保留新行

Raz*_*hyn 2 php regex

我正在使用这个正则表达式来删除空行:

(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+
Run Code Online (Sandbox Code Playgroud)

在 php 中:

$search = array(
            '@( |\t|\f)+@', // Shorten multiple whitespace sequences
            '@^\s+|\s+$@',  // Trim lines
            '@(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+@'    //Remove blank lines
            );
$replace = array(' ','',"\r\n");
$string = preg_replace($search, $replace, $string);
Run Code Online (Sandbox Code Playgroud)

但是我对这段代码有一些特别的问题:
原始:

 <script type="text/javascript">
//<![CDATA[
iCart.init({
    title: 'Aggiungi',
    cart: 'Carrello',
....
</script>
Run Code Online (Sandbox Code Playgroud)

更换后:

<script type="text/javascript">
//<![CDATA[iCart.init({
title: 'Aggiungi',
cart: 'Carrello',
....
</script>
Run Code Online (Sandbox Code Playgroud)

我想获得什么:

<script type="text/javascript">
//<![CDATA[
iCart.init({
title: 'Aggiungi',
cart: 'Carrello',
....
</script>
Run Code Online (Sandbox Code Playgroud)

我已经用 regex101 ( FIDDLE )做了一些测试,它给了我正确的结果,但我无法在真实环境中实现相同的目标


编辑
更改查找正则表达式(修剪产生了一些问题):

$search = array(
                 '@( |\t|\f)+@',    // Shorten multiple whitespace sequences
                 '@^\s+|[ \t]+$@gmi'    //Remove blank lines
                );
$replace = array(' ','');
$string = preg_replace($search, $replace, $string);
Run Code Online (Sandbox Code Playgroud)

但是还是有问题

Sam*_*Sam 5

我认为这就是你想要的: ^\s+


用:

$string = preg_replace('/^\s+/m', '', $string);
Run Code Online (Sandbox Code Playgroud)

解释:

  • ^使用m多行修饰符定位到新行的开头
  • \s+找到 1+ 个空格 ( [\r\n\t\f ]) 字符;这可能是一个完整的空行或只是前面的缩进