O que essa regex significa? ! -. *? -

2

O que essa regex faz?

<!--.*?-->
    
por Escarcha 17.10.2014 / 12:10

2 respostas

6

Esta expressão regular corresponderá a comentá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 --> .

Veja link

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

Veja link

    
por 17.10.2014 / 13:19
3
  • <!-- corresponde aos caracteres <!-- literalmente
  • . corresponde a qualquer caractere (exceto a nova linha)
  • *? é um quantificador que corresponde à regex precedente entre zero e tempo ilimitado, o menor número de vezes possível, expandindo conforme necessário [preguiçoso]
  • --> corresponde aos caracteres --> literalmente

Resposta do testador de regex link

Observe que * corresponde à regex precedente entre zero e tempos ilimitados. como muitos tempos possíveis. Esta é uma distinção importante. Considere os dois seguintes regexs:

  • A: <!--.*?--> (o que você perguntou)
  • B: <!--.*-->

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

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

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

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

    
por 17.10.2014 / 12:20