in reply to Re^3: Please correct me in the above regular expression
in thread Please correct me in the above regular expression

This node falls below the community's threshold of quality. You may see it by logging in.

Replies are listed 'Best First'.
Re^5: Please correct me in the above regular expression
by AnomalousMonk (Archbishop) on Mar 21, 2021 at 08:13 UTC

    I surrender. One way:

    Win8 Strawberry 5.8.9.5 (32) Sun 03/21/2021 4:04:08 C:\@Work\Perl\monks >perl use strict; use warnings; my $inData = <<INDATA; int abc; .abc(abc); xyzzy int foo; .foo(foo); INDATA open my $in_fh1, '<', \$inData; my $rx_pre = qr{ [ .(] }xms; my $rx_target = qr{ abc }xms; while (my $line = <$in_fh1>) { if ($line =~ m{ $rx_pre $rx_target }xms) { for my $i (1 .. 2) { (my $changed = $line) =~ s{ ($rx_pre $rx_target) }{${1}_$i +}xmsg; print $changed; } } else { print $line; } } ^Z int abc_1; int abc_2; .abc_1(abc_1); .abc_2(abc_2); xyzzy int foo; .foo(foo);


    Give a man a fish:  <%-{-{-{-<

    A reply falls below the community's threshold of quality. You may see it by logging in.
Re^5: Please correct me in the above regular expression
by BillKSmith (Monsignor) on Mar 21, 2021 at 19:33 UTC
    You are numbering all abc's. There is no need to match surrounding characters. Note that the way I have rewritten your test cases removes all ambiguity concerning white space.
    use strict; use warnings; use Test::More; my @cases = ( # Input Expected Description ["int abc;\n", "int abc_1;\n\nint abc_2;\n\n", 'line 1'], [".abc(abc);\n", ".abc_1(abc_1);\n\n.abc_2(abc_2);\n\n", 'line 2'], ); plan tests => scalar @cases; foreach my $case (@cases) { my $line = $case->[0]; my $out = ''; $out .= ($line =~ s/abc/abc_$_/gr) . "\n" for (1,2); is( $out, $case->[1], $case->[2] ); }
    OUTPUT: 1..2 ok 1 - line 1 ok 2 - line 2
    Bill