Was bedeutet dieser reguläre Ausdruck?

Was bedeutet dieser reguläre Ausdruck?

Was macht dieser reguläre Ausdruck?

<!--.*?-->

Antwort1

Dieser reguläre Ausdruck wird übereinstimmenHTML-Kommentare

Insbesondere:

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

Also, Ihr regulärer Ausdruck für diesen Text:

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

wird nur übereinstimmen <!-- first -->.

Sehenhttp://regex101.com/r/gF7vX2/1

Ohne das ? würde es auf alles zwischen dem ersten Vorkommen von <!--und dem letzten passen -->, mit anderen Worten würde es passen:<!-- first --> yaddahyaddah <!-- second -->

Sehenhttp://regex101.com/r/fP4kA3/1

Antwort2

  • <!--<!--stimmt wörtlich mit den Zeichen überein
  • .passt zu jedem Zeichen (außer Newline)
  • *?ist ein Quantifizierer, der den vorhergehenden regulären Ausdruck zwischen null und unbegrenzt oft, so wenig wie möglich, abgleicht und nach Bedarf erweitert wird [lazy]
  • -->-->stimmt wörtlich mit den Zeichen überein

Antwort vom Regex-Testerhttp://regex101.com/r/lA1bH5/2

Beachten Sie, dass *der vorhergehende reguläre Ausdruck zwischen null und unbegrenzt oft übereinstimmt, davieleso oft wie möglich. Dies ist ein wichtiger Unterschied. Betrachten Sie die folgenden beiden regulären Ausdrücke:

  • A: <!--.*?-->   (das, nach dem Sie gefragt haben)
  • B:<!--.*-->

Und betrachten Sie die unten gezeigte Datenzeile D. Regex A findet darin zwei Übereinstimmungen; Regex B findet nur eine:

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

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

Daher behandelt Regex B das HTML zwischen den beiden Kommentaren fälschlicherweise, als befände es sich in einem Kommentar.

verwandte Informationen