Regex Perl多行正则表达式语句

Regex Perl多行正则表达式语句,regex,perl,whitespace,removing-whitespace,Regex,Perl,Whitespace,Removing Whitespace,我在使用多行正则表达式语句时遇到了一些问题 基本上,我正在尝试删除一个“->”后面的空行。匹配多行部分有点棘手。以下是我目前掌握的情况: perl -00 -p -i -e 's/\) ->(?=[^\n]*\n\n)$/\) ->\n/m' $filename 以下是我的输入/输出: Input: setUp = config: (cb) -> randomFunction (cb)-> cb?() nestedObject:

我在使用多行正则表达式语句时遇到了一些问题

基本上,我正在尝试删除一个“->”后面的空行。匹配多行部分有点棘手。以下是我目前掌握的情况:

perl -00 -p -i -e 's/\) ->(?=[^\n]*\n\n)$/\) ->\n/m' $filename
以下是我的输入/输出:

Input:
setUp = 
  config: (cb) ->

    randomFunction (cb)->

       cb?()

  nestedObject: 
    key: (cb) ->

      cb?()


Output:
setUp = 
  config: (cb) ->
    cb?()

  nestedObject: 
    key: (cb) ->
      cb?()

将换行符移出“向前看”。试一试

    s/\) ->(?=[^\n]*)\n\n/\) ->\n/mg;
替换中不会替换“前瞻”中的字符

(事实上,我不明白你为什么需要向前看

    s/\) ->.*\n\n/\) ->\n/mg;
这项工作也是如此,任何与前瞻性匹配的非零长度序列也会使整个模式匹配失败。)


您可能还希望使用
/g
标志,因为您希望在文档中多次执行此替换。

只需使用触发器范围逐行处理,删除所有空白行作为结束条件:

perl -i -pe '/\) ->\s*$/...!s/^\s*$//' file.txt
也许更容易阅读:

perl -i -pe 'm{\) ->\s*$}...!s/^\s*$//' file.txt

您可以使用以下替换项:

s/\) ->\R\K\R+//g
\R
是包含几种常见换行符类型的原子组的快捷方式

\K
删除匹配结果左侧的所有内容

这非常有效!你能不能再多教我一点语法,让我更了解perlI,我有点困惑{}。。。!构造。我的理解是,它匹配了“->\s*$”,然后一旦匹配,就只“抓取”s/^\s*$/(即:空行)。。。我是perlIf新手如果您是perl新手,以上内容肯定会有点混乱。然而,重要的细节记录在