この正規表現はどういう意味ですか?

この正規表現はどういう意味ですか?

この正規表現は何をするのでしょうか?

<!--.*?-->

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

  • <!--文字を<!--文字通りに一致させる
  • .任意の文字に一致します(改行を除く)
  • *?直前の正規表現に 0 回から無制限に一致する量指定子です。できるだけ少ない回数だけ繰り返し、必要に応じて拡張します [遅延]
  • -->文字を-->文字通りに一致させる

正規表現テスターからの回答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 をコメント内にあるかのように誤って処理します。

関連情報