Regular Expressions
Kiedy NIE powinieneś używać wyrażeń regularnych
Szukaj…
Uwagi
Ponieważ wyrażenia regularne są ograniczone do gramatyki regularnej lub gramatyki bezkontekstowej, istnieje wiele typowych nadużyć wyrażeń regularnych. Więc w tym temacie jest kilka przykładów, kiedy NIE powinieneś używać wyrażeń regularnych, ale zamiast tego użyj swojego ulubionego języka.
Niektóre osoby, gdy mają do czynienia z problemem, myślą:
„Wiem, użyję wyrażeń regularnych”.
Teraz mają dwa problemy.
- Jamie Zawiński
Pasujące pary (jak nawiasy, nawiasy…)
Niektóre silniki wyrażeń regularnych (takie jak .NET) mogą obsługiwać wyrażenia bezkontekstowe i to rozwiążą. Ale nie dotyczy to większości standardowych silników. I nawet jeśli tak się stanie, skończy się to złożonym, trudnym do odczytania wyrażeniem, podczas gdy użycie biblioteki analizującej może ułatwić zadanie.
Proste operacje na łańcuchach
Ponieważ wyrażenia regularne mogą wiele zdziałać, kuszące jest użycie ich do najprostszych operacji. Ale użycie silnika wyrażenia regularnego wiąże się z dodatkowymi kosztami użycia pamięci i procesora: musisz skompilować wyrażenie, przechowywać automat w pamięci, zainicjować go, a następnie nakarmić łańcuchem, aby go uruchomić.
I jest wiele przypadków, w których po prostu nie trzeba go używać! Niezależnie od wybranego języka, zawsze ma podstawowe narzędzia do manipulacji ciągami. Tak więc z reguły, gdy w standardowej bibliotece jest narzędzie do wykonania akcji, użyj tego narzędzia, a nie wyrażenia regularnego:
- rozdzielić ciąg?
Na przykład następujący fragment kodu działa w Pythonie, Ruby i JavaScript:
'foo.bar'.split('.')
Które jest łatwiejsze do odczytania i zrozumienia, a także o wiele bardziej wydajne niż (jakoś) równoważne wyrażenie regularne:
(\w+)\.(\w+)
- Czy usunąć spacje końcowe?
To samo dotyczy spacji końcowych!
'foobar '.strip() # python or ruby
'foobar '.trim() // javascript
Co byłoby równoznaczne z następującym wyrażeniem:
([^\n]*)\s*$ # keeping \1 in the substitution
Przetwarzanie HTML (lub XML, JSON, kod C lub…)
Jeśli chcesz wyodrębnić coś ze strony internetowej (lub dowolnego języka reprezentacji / programowania), wyrażenie regularne jest nieodpowiednim narzędziem do tego zadania. Zamiast tego powinieneś użyć bibliotek swojego języka, aby wykonać zadanie.
Jeśli chcesz czytać HTML, XML lub JSON, po prostu skorzystaj z biblioteki, która poprawnie go analizuje i służy jako użyteczne obiekty w twoim ulubionym języku! Skończysz z czytelnym i łatwiejszym do utrzymania kodem i nie skończysz
- RegEx dopasowuje otwarte tagi, z wyjątkiem tagów niezależnych XHTML
- Python analizuje HTML przy użyciu wyrażeń regularnych
- czy istnieje wyrażenie regularne do generowania wszystkich liczb całkowitych dla określonego języka programowania?