如何匹配子字符串忽略erlang中的大小写

时间:2018-08-31 01:47:17

标签: erlang ets

如何通过忽略大写/小写的字符串在ETS表中查找?

此代码通过以wo开头的字符串查找:

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

但是,就像WORD是大写字母一样,什么也不会返回。

谢谢!

1 个答案:

答案 0 :(得分:4)

在匹配规范中(或通常在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表中的数据并通过此键进行搜索。