【问题标题】:How match substring ignoring case in erlang如何在erlang中匹配子字符串忽略大小写
【发布时间】:2019-02-06 00:18:51
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

    标签: erlang ets


    【解决方案1】:

    在匹配规范中不支持不区分大小写的匹配(或通常在 Erlang 中的匹配)。你基本上有三个选择。

    1. 生成所有案例

      [{{"wo"++'_'}, [], ['$_']}, {{"wO"++'_'}, [], ['$_']}, {{"Wo"++'_'}, [], ['$_']}, {{"WO"++'_'}, [], ['$_']}]
      
    2. 使用保护表达式(对于较长的单词,因为组合的数量是 2^N)

      [{{['$1','$2'|'_']},
        [{'orelse',{'=:=','$1',$w},{'=:=','$1',$W}},
         {'orelse',{'=:=','$2',$o},{'=:=','$2',$O}}],
        ['$_']}]
      
    3. 使用string:casefold/1转换ets表中的数据,并按此键搜索。

    【讨论】:

    • 感谢您的回复!这种方式是我想象的,但我认为还有另一种能够涵盖更多的通用案例。我认为对于这种情况,有必要使用关系数据库或其他类型的存储,而不是 ETS。
    猜你喜欢
    • 2011-09-28
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    相关资源
    最近更新 更多