\A ((?-s: .+)) .+ ((?-s: .+)) .+ ((?-s: .+)) \z
\A ((?-s: .+)) \z
\A ((?-s: (?s: .+))) \z
####
^ ( $re_nonl ) $re_all ( $re_nonl ) $re_all ( $re_nonl ) $
^ ( $re_nonl ) $
^ ( $re_all ) $
####
qr{(?mo:...)(?ds:...)}
qr{(?mo:...(?ds:...)...)}
####
qr{(?mo-ds:...)(?ds-mo:...)}mods
qr{(?mo-ds:...(?ds-mo:...)...)}mods
####
#!/usr/bin/env perl -l
use strict;
use warnings;
use Test::More tests => 7;
my $expA = "A: match, \$1 'aa ' @ 0 \$2 ' ' @ 9 \$3 'c' @ 11";
my $expB = '';
my $expC = "C: match, \$1 'aa \n bb \n cc' @ 0";
my $expD = "D: match, \$1 'aa ' @ 0 \$2 ' cc' @ 9";
my $fmtA = "A: match, \$1 '%s' @ %d \$2 '%s' @ %d \$3 '%s' @ %d";
my $fmtB = "B: match, \$1 '%s' @ %d";
my $fmtC = "C: match, \$1 '%s' @ %d";
my $fmtD = "D: match, \$1 '%s' @ %d \$2 '%s' @ %d";
my $s = "aa \n bb \n cc";
my $re_all = qr{(?sx: .+ )};
my $re_nonl = qr{(?x: [^\n]+ )};
my $reA = qr{(?x: ^ ( $re_nonl ) $re_all ( $re_nonl ) $re_all ( $re_nonl ) $ )};
my $reB = qr{(?x: ^ ( $re_nonl ) $ )};
my $reC = qr{(?x: ^ ( $re_all ) $ )};
my $reAiso = qr{(?sx: ^ ([^\n]+) .+ ([^\n]+) .+ ([^\n]+) $ )};
my $reBiso = qr{(?x: ^ ( .+ ) $ )};
my $reCiso = qr{(?sx: ^ ( .+ ) $ )};
my $reD = qr{(?msx: \A ( .+? ) $ .+ ^ ( .+ ) \z )};
my ($gotA, $gotB, $gotC, $gotAiso, $gotBiso, $gotCiso, $gotD) = ('') x 7;
$gotA = sprintf $fmtA, $1, $-[1], $2, $-[2], $3, $-[3] if $s =~ $reA;
$gotB = sprintf $fmtB, $1, $-[1] if $s =~ $reB;
$gotC = sprintf $fmtC, $1, $-[1] if $s =~ $reC;
$gotAiso = sprintf $fmtA, $1, $-[1], $2, $-[2], $3, $-[3] if $s =~ $reAiso;
$gotBiso = sprintf $fmtB, $1, $-[1] if $s =~ $reBiso;
$gotCiso = sprintf $fmtC, $1, $-[1] if $s =~ $reCiso;
$gotD = sprintf $fmtD, $1, $-[1], $2, $-[2] if $s =~ $reD;
is($gotA, $expA, 'testA');
is($gotB, $expB, 'testB');
is($gotC, $expC, 'testC');
is($gotAiso, $expA, 'testAiso');
is($gotBiso, $expB, 'testBiso');
is($gotCiso, $expC, 'testCiso');
is($gotD, $expD, 'testD');
####
1..7
ok 1 - testA
ok 2 - testB
ok 3 - testC
ok 4 - testAiso
ok 5 - testBiso
ok 6 - testCiso
ok 7 - testD