首页 > 解决方案 > 如何在erlang中匹配子字符串忽略大小写

问题描述

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

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

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

但是,就像WORD大写一样,什么都不返回。

谢谢!

标签: erlangets

解决方案


匹配规范中不支持不区分大小写的匹配(或通常在 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并进行搜索。


推荐阅读