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新手,以上内容肯定会有点混乱。然而,重要的细节记录在