Regex 在Eclipse中取消Perl代码块注释的正则表达式是什么?

Regex 在Eclipse中取消Perl代码块注释的正则表达式是什么?,regex,eclipse,perl,comments,replace,Regex,Eclipse,Perl,Comments,Replace,我需要一个正则表达式来取消对Perl代码块的注释,并在每一行用注释 到目前为止,我在Eclipse IDE中的find表达式是匹配注释块的(^#(.*$\R)+,但是如果我将$2作为替换表达式,它只打印最后匹配的行。更换时如何卸下# 例如,我需要转换: # print "yes"; # print "no"; # print "blah"; 到 在大多数情况下,重复捕获组时,只保留最后一次捕获。您的原始模式使用+重复来匹配多行注释,但组2只能保留最后一行中最后一个匹配中捕获的内容。这就是你问题

我需要一个正则表达式来取消对Perl代码块的注释,并在每一行用
注释

到目前为止,我在Eclipse IDE中的find表达式是匹配注释块的
(^#(.*$\R)+
,但是如果我将
$2
作为替换表达式,它只打印最后匹配的行。更换时如何卸下
#

例如,我需要转换:

# print "yes";
# print "no";
# print "blah";


在大多数情况下,重复捕获组时,只保留最后一次捕获。您的原始模式使用
+
重复来匹配多行注释,但组2只能保留最后一行中最后一个匹配中捕获的内容。这就是你问题的根源

要解决此问题,可以删除外部重复,以便一次匹配并替换一行。也许最简单的模式是匹配:

^#\s*
并替换为空字符串

由于这样一次只执行一行匹配和替换,因此您必须根据需要重复多次(在某些情况下,您可以使用
g
global标志,例如Java中有
replaceFirst/All
对方法)

工具书类
相关问题
    • .NET正则表达式保留所有重复的匹配

关于Eclipse键盘快捷键的特别说明 在Java模式下,Eclipse已经有了添加/删除/切换块注释的键盘快捷键。默认情况下,
Ctrl
+
/
绑定到“切换注释”操作。您可以高亮显示多行,然后点击
Ctrl
+
/
,以打开和关闭块注释(即
/

您可以点击
Ctrl
+
Shift
+
L
查看所有键盘快捷键的列表。在Perl模式下,可能有一个可以切换Perl块注释
#

相关问题

    • 您需要全局
      g
      开关


      s/^#(.+)/$1/g

      使用
      ^#(.*$)
      搜索并替换为
      $1
      您可以尝试此选项:-

      use strict;
      use warning;
      my $data = "#Hello#stack\n#overflow\n";
      $data =~ s/^?#//g ;
      
      输出:-

      Hello
      
      stack
      
      overflow
      

      open(在、、“test1.pl”中)或die$!;
      打印美元数据#写文件
      收尾;
      接近;
      

      注意:注意
      #/usr/bin/perl
      在perl脚本中,它也将取消注释。

      为了确定perl“#”是注释还是其他内容,您必须编译perl并构建解析树,因为

      “#”是注释还是正则表达式的一部分取决于whatever()是否为空,这取决于解析树

      但是,对于简单的情况,您的失败是因为(^#(.*$\R)+)重复捕获组,而这不是您想要的

      但是无论如何,如果你想处理简单的情况,我甚至不喜欢其他人都在使用的正则表达式,因为如果在#之前有空格,它就失败了。那怎么办

      ^\s*#(.*)$
      
      ??这将匹配以注释开头的任何行(可以选择使用空格,例如,对于缩进块)。

      尝试以下正则表达式:

      (^[\t ]+)(\#)(.*) (^[\t]+)(\\\)(.*) 有了这个替代品:

      $1$3 $1$3 组1为(^[\t]+),并匹配所有前导空格(空格和制表符)。
      第2组为(#),与一个字符匹配。

      第3组是(.*),与行的其余部分匹配。

      他正在取消Perl的注释,但他没有使用Perl来完成。好吧,^#\s*确实解决了这个问题,但我的意图是将它作为一个整体进行匹配,并替换块中的所有#,这样我就可以只对某些已注释的块使用find和replace。如果我们重复捕获组,如果不使用“全部替换”,则取消对一个大块的注释将非常乏味,如果使用“全部替换”,则其他一些块也将取消注释。。。主要的问题是我是否可以避免#与捕获组匹配我一直在使用Eclipse快捷方式,但尝试使用正则表达式,这样我就不必把手移到鼠标上了。通过键盘查找和替换:)这是非常不正确的。1.
      +
      至少需要一个空格字符。他的例子没有显示任何前导空格。至少使用
      *
      将其设置为可选。2.他想删除
      #
      和文本之间的空白,而您的正则表达式却没有这样做(在他的示例数据中,文本将缩进一个字符。3.
      #
      不是正则表达式的特殊字符,只要它没有被用作分隔符(在这种情况下没有实际原因),它不需要逃逸。
      ^\s*#(.*)$
      
      (^[\t ]+)(\#)(.*) $1$3