Wielu programistów zna radość wymyślania szybkiego wyrażenia regularnego, obecnie często przy pomocy jakiegoś serwisu internetowego lub bardziej tradycyjnie w trybie interaktywnym, lub może pisząc mały skrypt, który ma opracowane wyrażenie regularne, oraz zbiór przypadków testowych . W obu przypadkach proces jest iteracyjny i dość szybki: hakuj tajemniczo wyglądający ciąg, aż dopasuje i uchwyci to, czego chcesz i odrzuci to, czego nie chcesz.
W prostym przypadku wynik może być mniej więcej taki, jak wyrażenie regularne Java:
Pattern re = Pattern.compile(
"^\\s*(?:(?:([\\d]+)\\s*:\\s*)?(?:([\\d]+)\\s*:\\s*))?([\\d]+)(?:\\s*[.,]\\s*([0-9]+))?\\s*$"
);
Wielu programistów zna również potrzebę edytowania wyrażeń regularnych lub po prostu kodowania wokół wyrażeń regularnych w bazie kodu starszego typu. Przy odrobinie edycji w celu podzielenia go, powyższe wyrażenie regularne jest nadal bardzo łatwe do zrozumienia dla każdego, kto zna się na wyrażeniach regularnych, a weteran wyrażeń regularnych powinien od razu zobaczyć, co robi (odpowiedz na końcu postu, na wypadek, gdyby ktoś chciał wykonać ćwiczenie wymyślenia tego sami).
Jednak rzeczy nie muszą być znacznie bardziej skomplikowane, aby wyrażenie regularne stało się naprawdę tylko do zapisu, a nawet przy starannej dokumentacji (co wszyscy oczywiście robią dla wszystkich złożonych wyrażeń regularnych, które piszą ...), modyfikacja wyrażeń regularnych staje się trudne zadanie. Może to być bardzo niebezpieczne zadanie, jeśli wyrażenie regularne nie jest dokładnie testowane jednostkowo (ale wszyscy oczywiście mają kompleksowe testy jednostkowe dla wszystkich złożonych wyrażeń regularnych, zarówno dodatnich, jak i ujemnych ...).
Krótko mówiąc, czy istnieje rozwiązanie / alternatywa zapisu / wyrażenia dla wyrażeń regularnych bez utraty ich mocy? Jak wyglądałoby powyższe wyrażenie regularne z alternatywnym podejściem? Każdy język jest w porządku, choć najlepiej byłoby rozwiązanie w wielu językach, o ile wyrażenia regularne są w wielu językach.
A potem to, co robi wcześniejsze wyrażenie regularne: parsuj ciąg liczb w formacie 1:2:3.4
, przechwytując każdą liczbę, gdzie spacje są dozwolone i tylko 3
wymagane.