【问题标题】:Regex remove blank lines, but leave new line正则表达式删除空行,但留下新行
【发布时间】:2023-04-03 07:38:02
【问题描述】:

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

(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+

在 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);

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

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

替换后:

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

我想得到什么:

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

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


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

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

但还是有问题

【问题讨论】:

  • 有什么问题?它有什么作用,你想让它做什么?
  • 这可能正是您想要的(更简单,所以告诉我它是否有效,我会发布一个带有解释的答案):\v$
  • @AndyLester 我已经更新了问题
  • @Sam 有没有办法避免替换后的空格?
  • @Dheed 看看我的回答。它适用于您的示例。

标签: php regex


【解决方案1】:

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


用途:

$string = preg_replace('/^\s+/m', '', $string);

说明:

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

【讨论】:

    猜你喜欢
    • 2016-06-17
    • 2021-04-10
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多