Jasne, użyj unrolling-the-loop technique:
/\*[^*]*(?:\*(?!/)[^*]*)*\*/
Zobacz regex demo
rozwijając technikę pętli opiera się na założeniu, że w większości przypadków, to kown w repeteated naprzemiennie, co sprawa powinna być najbardziej typowy, a który wyjątkowy. Nazwiemy pierwszy, zwykły przypadek, a drugi specjalny przypadek. Ogólna składnia rozwijając technikę pętli można następnie zapisać jako:
normal* (special normal*)*
Co może oznacza coś, Match normalny przypadek, jeśli okaże się, szczególny przypadek, dopasowane, niż zgodne z normalną sprawę ponownie . Zauważysz, że część tej składni może potencjalnie prowadzić do superliniowego dopasowania. Aby uniknąć Neverending dopasowanie do dołączania, następujące zasady Powinni być ostrożnie stosowana:
- początek szczególnym przypadku i normalnym przypadku muszą się wzajemnie wykluczać
- specjalny zawsze musi dopasować co najmniej jeden znak
- wyrażenie specjalne musi być atomowe: należy uważać na to, że
(special normal*)*
można zredukować do (special)*
, co jeśli jest specjalne, to jest to special*
, które stało się podobne do (a*)*
, co jest wyrażeniem nieokreślonym.
deklaracja C# wzoru (przy użyciu dosłownie ciąg dosłowne):
var pattern = @"/\*[^*]*(?:\*(?!/)[^*]*)*\*/";
Podział regex:
/\*
- dosłowne /*
[^*]*
- 0 lub więcej znaków innych niż *
(?:\*(?!/)[^*]*)*
- 0 lub więcej sekwencji ...
\*(?!/)
- dosłowna *
nie następuje /
[^*]*
- 0 lub więcej znaków innych niż *
\*/
- dosłownym */
Tutaj jest wykres pokazujący jak skuteczny 3 potencjalnie identyczne regexps są (testowane pod regexhero.net *):
* Testowane przeciwko /* Comment * Typical * Comment */
Wydajność używania chciwego kontra nieautentycznego może zależeć od długości komentarza. –