Что делает это регулярное выражение?
<!--.*?-->
решение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 -->
решение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-код между двумя комментариями, как если бы он находился в комментарии.