¿Qué significa esta expresión regular?

¿Qué significa esta expresión regular?

¿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 -->

Verhttp://regex101.com/r/fP4kA3/1

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.

información relacionada