2012-03-16 9 views
6

Czy powinienem utworzyć jeden złożony RegEx, aby rozwiązać wszystkie przypadki pod ręką, czy też powinienem złamać jeden złożony RegEx w wielu Regeksach, które?Czy powinienem utworzyć jeden złożony kod REGEX lub wiele złożonych i mniej złożonych?

Jestem zaniepokojony wydajnością przy użyciu złożonego Regex. Czy przełamanie złożonego Regexa na mniejsze proste wyrażenie spełnia się lepiej?

+2

Pod względem czystej wydajności zależy od zbyt wielu rzeczy. Ale pod względem czytelności i łatwości konserwacji, połączenie krótkich wyrażeń regularnych jest niezmiernie lepsze. – bdares

Odpowiedz

2

Nie sądzę, by teraz była duża różnica z powodu optymalizacji kompilatora, jednak użycie prostego kodu ułatwi zrozumienie kodu, co z kolei ułatwi konserwację.

3

Jeśli chcesz uzyskać sensowną odpowiedź na pytanie o wydajność, musisz porównać oba przypadki.

Jeśli chodzi o czytelność/konserwację, można napisać nieczytelny kod w dowolnym języku i można to zrobić za pomocą wyrażeń regularnych. Jeśli piszesz dużą, pamiętaj, aby użyć modyfikatora x (IgnorePatternWhitespace w języku C#) i użyć komentarzy do zbudowania regex.

losowo wybrany przykład z jednej z moich ostatnich odpowiedzi w c#:

MatchCollection result = Regex.Matches 
    (testingString, 
     @"  
      (?<=\$) # Ensure there is a $ before the string 
      [^|]* # Match any character that is not a | 
      (?=\|) #Till a | is ahead 
     " 
     , RegexOptions.IgnorePatternWhitespace); 
+0

Zapoznaj się również z moim blogem: [Czy piszesz czytelne wyrażenia regularne?] (Http://blog.xisb.de/?p=57), gdzie dostarczam więcej szczegółów na temat używania 'RegexOptions.IgnorePatternWhitespace'. – stema

-1

Złożone wyrażenia regularne mogą być bardzo powolny, ale to zależy od wyrażenia regularnego i środowiska. Weźmy przypadek string.trim(). Można go zaimplementować trywialnie za pomocą wyrażeń regularnych. Możesz użyć jednego wyrażenia regularnego lub dwóch (usuń spacje przednie i tylne osobno). Oto ktoś, kto wykonał 11 różnych implementacji przycinania javascript i przetestował je w różnych przeglądarkach: http://blog.stevenlevithan.com/archives/faster-trim-javascript. W takim przypadku jeden regex traci dużo czasu w większości sytuacji.

Powiązane problemy