0

私は Perl を初めて使用するので、次のことを確認するのに役立つパターンを知る必要があります。

$string="test1\n   //   test2   \n test3 ";

test2コメントされていないことを確認するパターンが欲しい。私は肯定的および否定的な先読みについて読み、同じことを実装しようとしましたが、うまくいきませんでした。

コード スニペットは次のとおりです。

$string = "test3\n//test2\ntest3";

if ($string =~ /(?!\/\/)test2*/) {
  $matched = $&;
  print("$matched");
}
else {
  print("No comments before test2");
}

誰かが上記のパターンを手伝ってくれませんか?

4

3 に答える 3

0

が複数回出現していtest2ますか?

test2これは、文字列にコメント化された出現があるかどうかをチェックします

$str =~ m|//[^\S\n]*test2|;

それで

$str !~ m|//[^\S\n]*test2|;

のコメント化されたオカレンスがないかどうかがわかりますtest2

于 2013-07-09T22:28:19.657 に答える
0

Regexp::CommonCPAN https://metacpan.org/module/Regexp::Commonからロードし、そのRegexp::Common::comment

#!/usr/bin/env perl

use strict;
use warnings;

# --------------------------------------

use charnames qw( :full :short );
use English qw( -no_match_vars ) ;  # Avoids regex performance penalty

my $string="test1\n    //  test2   \n test3 ";

use Regexp::Common qw( comment );

if( $string =~ m/ ( $RE{comment}{'C++'} ) /msx ){
  my $comment = $1;
  if( $comment =~ m{ test2 }msx ){
    print $comment;
  }else{
    goto NO_COMMENTS_TEST2;
  }
}else{

  NO_COMMENTS_TEST2:
  print "No comments before test2\n";
}
于 2013-07-09T20:26:40.883 に答える