Estava meditant sobre els operadors de les expressions regulars i hi ha un modificador que no acabava d'entendre. És l'operador "?", que especifica que funciona en mode mandrós enlloc de golut. I això del golut i del mandrós (o "greedy" i "lazy" en guiri) que és?
Suposem que volem construir una expressió regular que encaixi en un tag HTML. Seria algo així:
<.+>
Es a dir: "<" per l'inici de tag, "." per qualsevol caràcter, "+" per dir repetició i ">" pel fi del tag. D'aquesta manera l'expressió encaixaria amb "<em>" o amb "<body>" o amb "<table>" o amb... Però aleshores aquesta expressió regular també es menjaria això, que seria incorrecte:
<em>Hello World</em>
Es a dir, funciona en mode golut i el ".+" vol encaixar el màxim nombre de caràcters i aleshores retorna tot el text sencer (el que hi ha entre els caràcters en vermell, encaixa el primer "<", després qualsevol caràcter (inclòs el segon ">") i tanca amb l'últim ">"). Si es vol que només agafi el primer tag caldria posar l'expressió regular en mode mandrós, així:
<.+?>
Observar que s'ha afegit el "?" per indicar que el ".+" funciona en mode mandrós. Aleshores obtindria el següent:
<em>Hello World</em>
Es a dir s'atura en el següent ">" que troba i no segueix encaixant caràcters. |