Perl MultiLine Regex声明

时间:2014-04-22 02:03:30

标签: regex perl whitespace removing-whitespace

我在使用多行正则表达式语句为我工作时遇到了一些麻烦。

基本上,我试图删除a)后面的空行 - >。匹配多线部分有点棘手。这就是我到目前为止所拥有的:

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?()

3 个答案:

答案 0 :(得分:2)

将换行符移出前瞻。尝试

    s/\) ->(?=[^\n]*)\n\n/\) ->\n/mg;

前瞻中的字符不会替换为替换。

(实际上,我不明白为什么你甚至需要展望。

    s/\) ->.*\n\n/\) ->\n/mg;

也可以完成这项任务,任何与前瞻相匹配的非零长度序列也会使整个模式匹配失败。)

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

答案 1 :(得分:2)

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

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

也许更容易阅读:

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

答案 2 :(得分:2)

您可以使用此替代品:

s/\) ->\R\K\R+//g

\R是原子组的快捷方式,包含几种常见类型的换行符 \K从匹配结果

中删除左侧的所有内容