Negaciones y operadores no greedy

No siempre se puede usar un operador greedy en sustitución de una clase negada. En este ejemplo se intentan detectar las cadenas entre comillas dobles que terminan en el signo de exclamación:
> cat negynogreedy.pl
#!/usr/bin/perl

 $b = $a = 'Ella dijo "Ana" y yo contesté: "Jamás!". Eso fué todo.';
 $a =~ s/".*?!"/-$&-/;
 print "$a\n";
 $b =~ s/"[^"]*!"/-$&-/;
 print "$b\n";

> negynogreedy.pl
Ella dijo -"Ana" y yo contesté: "Jamás!"-. Eso fué todo.
Ella dijo "Ana" y yo contesté: -"Jamás!"-. Eso fué todo.

Casiano Rodríguez León
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19