O que esse regex significa?

O que esse regex significa?

O que esse regex faz?

<!--.*?-->

Responder1

Esta expressão regular irá corresponderComentários HTML

Em 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 "-->"

Então, seu regexp contra este texto:

blah <!-- first --> yaddahyaddah <!-- second --> other random words.

corresponderá apenas a <!-- first -->.

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

Sem o? corresponderia a tudo entre a primeira ocorrência de <!--e o final -->, em outras palavras, corresponderia:<!-- first --> yaddahyaddah <!-- second -->

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

Responder2

  • <!--corresponde aos personagens <!--literalmente
  • .corresponde a qualquer caractere (exceto nova linha)
  • *?é um quantificador que corresponde ao regex anterior entre zero e tempos ilimitados, o menor número de vezes possível, expandindo conforme necessário [preguiçoso]
  • -->corresponde aos personagens -->literalmente

Resposta do testador de regexhttp://regex101.com/r/lA1bH5/2

Observe que *corresponde ao regex anterior entre zero e tempos ilimitados, comomuitosvezes possível. Esta é uma distinção importante. Considere as duas regexs a seguir:

  • R: <!--.*?-->   (aquele sobre o qual você perguntou)
  • B:<!--.*-->

E considere a linha de dados D, mostrada abaixo. Regex A encontrará duas correspondências nele; regex B encontra apenas um:

D: <!-- comment one --> HTML <!-- comment two -->

A: (.... match #1 ....)      (.... match #2 ....)
B: (................. match #1 .................)

Portanto, a regex B tratará incorretamente o HTML entre os dois comentários como se estivesse em um comentário.

informação relacionada