#!/usr/bin/env perl -l use strict; use warnings; my $sep = '-' x 60 . "\n"; my ($start, $end) = ('workset((', 'dIonly'); my $all_to_end_incl; { local $/ = $end; $all_to_end_incl = ; } print $sep, "Up to and including first '$end':\n", $all_to_end_incl; my $start_end_incl = substr $all_to_end_incl, index $all_to_end_incl, $start; print $sep, "From '$start' to '$end' inclusive:\n", $start_end_incl; my $start_end_excl = substr $start_end_incl, length($start), -length($end); print $sep, "From '$start' to '$end' exclusive:\n", $start_end_excl; my $paren_group_re; $paren_group_re = qr{ \( (?: (?> [^()]+ ) | (??{ $paren_group_re }) )* \) }x; my $workset_re = qr{ ( workset\(\( (?: [^(]+ (??{ $paren_group_re }) [, ]* )* \)\) ) }x; $start_end_excl =~ $workset_re; print $sep, "Wanted extract:\n", $1; __DATA__ ... other data before 'workset' found ... workset(( RiskCA(cA, 3) RiskCB(cB, 2)) c workset((RiskCA(cA, 3), RiskCB(cB, 2), totPaycA(cA, 7), totPaycB(cB, 6))) *********** trial #682 ceq pAAr(rA, cA, P1) c pAAc(rA, cA, P2) c ineqAA(rA, cA, P3) = (pAAc(rA, cA, ... rl dec c cognum(X2) c watch(X1) c worklist(L) c workset((S, maxtotIneqC(cB, X))) => watch(X1 + 1) c cognum(X2 + 1) c worklist(nil) c workset(empty) c playA c dIonly [label avoidMaxI] . X2 --> 3 X1 --> 3 #### Wanted extract: workset((RiskCA(cA, 3), RiskCB(cB, 2), totPaycA(cA, 7), totPaycB(cB, 6))) #### ------------------------------------------------------------ Up to and including first 'dIonly': ... other data before 'workset' found ... workset(( RiskCA(cA, 3) RiskCB(cB, 2)) c workset((RiskCA(cA, 3), RiskCB(cB, 2), totPaycA(cA, 7), totPaycB(cB, 6))) *********** trial #682 ceq pAAr(rA, cA, P1) c pAAc(rA, cA, P2) c ineqAA(rA, cA, P3) = (pAAc(rA, cA, ... rl dec c cognum(X2) c watch(X1) c worklist(L) c workset((S, maxtotIneqC(cB, X))) => watch(X1 + 1) c cognum(X2 + 1) c worklist(nil) c workset(empty) c playA c dIonly ------------------------------------------------------------ From 'workset((' to 'dIonly' inclusive: workset(( RiskCA(cA, 3) RiskCB(cB, 2)) c workset((RiskCA(cA, 3), RiskCB(cB, 2), totPaycA(cA, 7), totPaycB(cB, 6))) *********** trial #682 ceq pAAr(rA, cA, P1) c pAAc(rA, cA, P2) c ineqAA(rA, cA, P3) = (pAAc(rA, cA, ... rl dec c cognum(X2) c watch(X1) c worklist(L) c workset((S, maxtotIneqC(cB, X))) => watch(X1 + 1) c cognum(X2 + 1) c worklist(nil) c workset(empty) c playA c dIonly ------------------------------------------------------------ From 'workset((' to 'dIonly' exclusive: RiskCA(cA, 3) RiskCB(cB, 2)) c workset((RiskCA(cA, 3), RiskCB(cB, 2), totPaycA(cA, 7), totPaycB(cB, 6))) *********** trial #682 ceq pAAr(rA, cA, P1) c pAAc(rA, cA, P2) c ineqAA(rA, cA, P3) = (pAAc(rA, cA, ... rl dec c cognum(X2) c watch(X1) c worklist(L) c workset((S, maxtotIneqC(cB, X))) => watch(X1 + 1) c cognum(X2 + 1) c worklist(nil) c workset(empty) c playA c ------------------------------------------------------------ Wanted extract: workset((RiskCA(cA, 3), RiskCB(cB, 2), totPaycA(cA, 7), totPaycB(cB, 6)))