Как сопоставить подстроку, игнорируя регистр в эрланге - PullRequest
0 голосов
/ 31 августа 2018

Как я могу найти в таблице ETS строку, которая игнорирует верхний / нижний регистр?

Этот код находится по строке, начинающейся с wo:

ets:test_ms({"WORD"}, [{{"wo"++'_'}, [], ['$_']}])

Но, как и WORD в верхнем регистре, ничего не возвращается.

Спасибо!

1 Ответ

0 голосов
/ 31 августа 2018

В спецификации совпадений не поддерживается сопоставление без учета регистра (или сопоставление в Erlang в целом). У вас есть три основных варианта.

  1. Генерация всех дел

    [{{"wo"++'_'}, [], ['$_']}, {{"wO"++'_'}, [], ['$_']}, {{"Wo"++'_'}, [], ['$_']}, {{"WO"++'_'}, [], ['$_']}]
    
  2. Использовать защитное выражение (для более длинных слов, поскольку количество комбинаций равно 2 ^ N)

    [{{['$1','$2'|'_']},
      [{'orelse',{'=:=','$1',$w},{'=:=','$1',$W}},
       {'orelse',{'=:=','$2',$o},{'=:=','$2',$O}}],
      ['$_']}]
    
  3. Преобразование данных в таблицу ets с использованием string:casefold/1 и поиск по этому ключу.

...