Bueno, una forma de hacerlo es así:
Using perl Syntax Highlighting
$r = qr/AGr|S|AG|FNI-II|FNIII|SS|FNIV|LG|LD/;
$_ = "FNI-II, II, 64: fol. 250v; FNIII, pról.: 3; SS, 1: fol. 3r; FNIV, 42: fol. 49r";
m/($r) (.+?) \s* (?=$r)/x;
say "[$1|$2]";
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
La idea es capturar todo hasta la próxima aparición del patrón.
Pero hay un problema: qué ocurre si la cadena es
$_ = "FNI-II, II, 64: fol. 250v;";
Es decir, no tenemos contemplado el caso de capturar todo hasta el final del texto.
Con esta variación lo resolvemos:
Using perl Syntax Highlighting
$r = qr/AGr|S|AG|FNI-II|FNIII|SS|FNIV|LG|LD/;
$_ = "FNI-II, II, 64: fol. 250v; FNIII, pról.: 3; SS, 1: fol. 3r; FNIV, 42: fol. 49r";
m/($r) (.+?) \s* (?:(?=$r)|$)/x;
say "[$1|$2]";
Coloreado en 0.012 segundos, usando
GeSHi 1.0.8.4
Edito: Ya encontré la manera:
Using perl Syntax Highlighting
$r = qr/AGr|S|AG|FNI-II|FNIII|SS|FNIV|LG|LD/;
$_ = "FNI-II, II, 64: fol. 250v; FNIII, pról.: 3; SS, 1: fol. 3r; FNIV, 42: fol. 49r";
m/($r)((?:(?! $r).)*)/;
say "[$1|$2]";
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
El espacio en blanco que hay delante de $r en la expresión regular es para desechar el espacio que sigue a '250v;'.