¿Qué hace esta expresión regular?
<!--.*?-->
Respuesta1
Esta expresión regular coincidirácomentarios HTML
En particular:
<!-- matches literal string "<!--"
. matches any character
* is a quantifier, it means "0 or more" of the previous character
? makes the regex non-greedy, so it matches as few times as possible
--> matches literal "-->"
Entonces, tu expresión regular contra este texto:
blah <!-- first --> yaddahyaddah <!-- second --> other random words.
coincidirá solamente <!-- first -->
.
Verhttp://regex101.com/r/gF7vX2/1
Sin el ? coincidiría con todo entre la primera aparición de <!--
y la final -->
, en otras palabras, coincidiría:<!-- first --> yaddahyaddah <!-- second -->
Respuesta2
<!--
coincide con los personajes<!--
literalmente.
coincide con cualquier carácter (excepto nueva línea)*?
es un cuantificador que coincide con la expresión regular anterior entre cero y un número ilimitado de veces, tan pocas veces como sea posible, expandiéndose según sea necesario [lazy]-->
coincide con los personajes-->
literalmente
Respuesta del probador de expresiones regulareshttp://regex101.com/r/lA1bH5/2
Tenga en cuenta que *
coincide con la expresión regular anterior entre cero y un número ilimitado de veces, comomuchosveces posible. Esta es una distinción importante. Considere las siguientes dos expresiones regulares:
- R:
<!--.*?-->
(el que preguntaste) - B:
<!--.*-->
Y considere la línea de datos D, que se muestra a continuación. Regex A encontrará dos coincidencias en él; la expresión regular B encuentra solo una:
D: <!-- comment one --> HTML <!-- comment two -->
A: (.... match #1 ....) (.... match #2 ....)
B: (................. match #1 .................)
Entonces la expresión regular B tratará incorrectamente el HTML entre los dos comentarios como si estuviera en un comentario.