【发布时间】:2019-02-06 00:18:51
【问题描述】:
如何通过忽略大小写的字符串在 ETS 表中找到?
此代码通过以wo开头的字符串查找:
ets:test_ms({"WORD"}, [{{"wo"++'_'}, [], ['$_']}])
但是,就像WORD 是大写一样,什么都不返回。
谢谢!
【问题讨论】:
如何通过忽略大小写的字符串在 ETS 表中找到?
此代码通过以wo开头的字符串查找:
ets:test_ms({"WORD"}, [{{"wo"++'_'}, [], ['$_']}])
但是,就像WORD 是大写一样,什么都不返回。
谢谢!
【问题讨论】:
在匹配规范中不支持不区分大小写的匹配(或通常在 Erlang 中的匹配)。你基本上有三个选择。
生成所有案例
[{{"wo"++'_'}, [], ['$_']}, {{"wO"++'_'}, [], ['$_']}, {{"Wo"++'_'}, [], ['$_']}, {{"WO"++'_'}, [], ['$_']}]
使用保护表达式(对于较长的单词,因为组合的数量是 2^N)
[{{['$1','$2'|'_']},
[{'orelse',{'=:=','$1',$w},{'=:=','$1',$W}},
{'orelse',{'=:=','$2',$o},{'=:=','$2',$O}}],
['$_']}]
使用string:casefold/1转换ets表中的数据,并按此键搜索。
【讨论】: