A mí sí que me devuelve la primera ocurrencia:
Using perl Syntax Highlighting
#!/usr/bin/env perl
use v5.14;
my $xcontenido = do { local $/; <DATA> };
my $tokencaptcha = $1 if $xcontenido =~ m/name="captcha_token" value="(\w+)/m;
my $tokenformulario = $1 if $xcontenido =~ m/name="form_build_id" value="form-(\w+)/m;
my $suma = $2 + $3 if $xcontenido =~ m/(Pregunta\s.*)<\/label>\s+(\d+)\s\+\s(\d+)/m;
say "tokencaptcha: $tokencaptcha";
say "tokenformulario: $tokenformulario";
say "suma: $suma";
__DATA__
</div>
<div class="captcha"><input data-drupal-selector="edit-captcha-sid" type="hidden" name="captcha_sid" value="178558" /><input data-drupal-selector="edit-captcha-token" type="hidden" name="captcha_token" value="6892c18016484defccd3b3a8b8e117fa" /><div class="form-item js-form-item form-type-textfield js-form-type-textfield form-item-captcha-response js-form-item-captcha-response form-group">
<label for="edit-captcha-response" class="control-label js-form-required form-required">Pregunta matemática</label>
2 + 1 =
<input autocomplete="off" data-drupal-selector="edit-captcha-response" aria-describedby="edit-captcha-response--description" class="form-text required form-control" type="text" id="edit-captcha-response" name="captcha_response" value="" size="4" maxlength="2" required="required" aria-required="true" />
</div>
<div class="captcha"><input data-drupal-selector="edit-captcha-sid" type="hidden" name="captcha_sid" value="178558" /><input data-drupal-selector="edit-captcha-token" type="hidden" name="captcha_token" value="6892c18016484defccd3b3a8b8e117fa" /><div class="form-item js-form-item form-type-textfield js-form-type-textfield form-item-captcha-response js-form-item-captcha-response form-group">
<label for="edit-captcha-response" class="control-label js-form-required form-required">Pregunta matemática</label>
4 + 3 =
<input autocomplete="off" data-drupal-selector="edit-captcha-response" aria-describedby="edit-captcha-response--description" class="form-text required form-control" type="text" id="edit-captcha-response" name="captcha_response" value="" size="4" maxlength="2" required="required" aria-required="true" />
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
La salida es:
Using text Syntax Highlighting
tokencaptcha: 6892c18016484defccd3b3a8b8e117fa
tokenformulario:
suma: 3
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
No sé por qué no te funciona, quizás sea un tema de espacios en blanco.
Detalles:
- No te hace falta poner el modificador '/g'. Es más: es mejor que lo quites y que solo lo uses en exp. reg. dentro de bucles.
- En la tercera exp. reg., tienes puesto esto: '(Pregunta\s.*)'. Ese '.*' es peligrosísimo. Quiero decir que puede ser la razón de tu fallo. En mi código, si agrego el modificador '/s' a esa exp. reg., entonces me sale la segunda suma. Es debido a que '.*' "se ha comido" todo el código HTML hasta el final, y luego ha ido hacia atrás, hasta que ha coincidido el resto del patrón. Por eso sale la última suma.
La tercera exp. reg. quedaría mejor así:
m{Pregunta mate.*?</label>\s+(\d+)\s+\+\s+(\d+)}mComo no capturamos "Pregunta ...", entonces los sumandos estarán en $1 y $2.
Observa también algo importante: hemos modificado el operador '.*', pasándolo de avaricioso a gentil, al añadirle un '?'. Ahora la búsqueda se detendrá en la primera ocasión que se cumpla el patrón, no la última. También he agregado un par de '+' a los caracteres '\s', por seguridad.