Когда я пишу программы на Erlang, которые выполняют синтаксический анализ текста, я часто сталкиваюсь с ситуациями, когда мне хотелось бы выполнить сопоставление с шаблоном с помощью регулярного выражения.
Например, я хотел бы сделать что-то вроде этого, где ~ это «составленный» оператор сопоставления регулярных выражений:
my_function(String ~ ["^[A-Za-z]+[A-Za-z0-9]*$"]) ->
....
Я знаю о модуле регулярных выражений (re), но, AFAIK, вы не можете вызывать функции при сопоставлении с образцом или в охранниках.
Кроме того, я бы хотел, чтобы сопоставление строк производилось без учета регистра. Это удобно, например, при разборе заголовков HTTP, я хотел бы сделать что-то вроде этого, где «Str ~ {Pattern, Options}» означает «Сопоставить Str с шаблоном шаблона, используя параметры Options»:
handle_accept_language_header(Header ~ {"Accept-Language", [case_insensitive]}) ->
...
Два вопроса:
Как вы обычно справляетесь с этим, используя только стандартный Erlang? Есть ли какой-то механизм / стиль кодирования, который близок к этому с точки зрения краткости и легкости чтения?
Есть ли в Эрланге работа (EEP?) Для решения этой проблемы?