この正規表現は何を意味しますか?

この正規表現は何を意味しますか?

この正規表現は何をしますか?

<!--.*?-->

答え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

*前の正規表現は、次のように0と無限の間で一致します。たくさんできるだけ何度も。これは重要な違いです。次の 2 つの正規表現を考えます。

  • A:(<!--.*?-->   あなたが尋ねたもの)
  • 第二:<!--.*-->

そして、以下のようにデータラインDを考えてみましょう。正規表現 A は 2 つの一致を探します。正規表現Bは1つだけ探します。

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

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

したがって、正規表現Bは、2つのコメント間のHTMLをコメント内のHTMLとして誤って処理します。

関連情報