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 -->
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.