Что означает это регулярное выражение?

Что означает это регулярное выражение?

Что делает это регулярное выражение?

<!--.*?-->

решение1

Это регулярное выражение будет соответствоватьHTML-комментарии

В частности:

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

Итак, ваше регулярное выражение для этого текста:

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

будет соответствовать только <!-- first -->.

Видетьhttp://regex101.com/r/gF7vX2/1

Без ? он бы соответствовал всему между первым вхождением <!--и последним -->, другими словами, он бы соответствовал:<!-- first --> yaddahyaddah <!-- second -->

Видетьhttp://regex101.com/r/fP4kA3/1

решение2

  • <!--соответствует персонажам <!--буквально
  • .соответствует любому символу (кроме новой строки)
  • *?квантификатор, который соответствует предыдущему регулярному выражению от нуля до неограниченного количества раз, так мало раз, как это возможно, расширяясь по мере необходимости [ленивый]
  • -->соответствует персонажам -->буквально

Ответ от тестировщика регулярных выраженийhttp://regex101.com/r/lA1bH5/2

Обратите внимание, что *соответствует предыдущему регулярному выражению от нуля до неограниченного количества раз, как показано ниже.многораз как можно больше. Это важное различие. Рассмотрим следующие два регулярных выражения:

  • A: <!--.*?-->   (тот, о котором вы спрашивали)
  • Б:<!--.*-->

И рассмотрим строку данных D, показанную ниже. Regex A найдет в ней два совпадения; Regex B найдет только одно:

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

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

Поэтому регулярное выражение B будет неправильно обрабатывать HTML-код между двумя комментариями, как если бы он находился в комментарии.

Связанный контент