Sieve中能否将变量字符串拆分为字符串列表?
在Sieve中拆分字符串为列表的实现方法
首先明确:标准Sieve没有原生的字符串拆分函数,但如果你的邮件服务支持regex(正则扩展,RFC 5228)、variables和loop扩展,完全可以通过正则匹配+循环的方式模拟拆分。
针对你的变量:
set "thevariable" "a bb ccc dddd eeeee ffffff";
可以用下面的代码实现拆分:
# 确保启用所需扩展(部分服务默认开启,需手动声明则添加此行) require ["variables", "regex", "loop"]; set "thevariable" "a bb ccc dddd eeeee ffffff"; set "remaining" "${thevariable}"; set "result_list" ""; # 循环匹配提取每个单词 while regex "${remaining}" "^\s*(\S+)(\s.*)?$" { # 提取匹配到的单词(正则捕获组1) set "word" "${1}"; # 将单词追加到结果列表,用逗号分隔 if "${result_list}" == "" { set "result_list" "\"${word}\""; } else { set "result_list" "${result_list}, \"${word}\""; } # 更新剩余字符串为捕获组2的内容(去掉已提取的单词) set "remaining" "${2}"; # 剩余字符串为空时退出循环 if "${remaining}" == "" { break; } } # 最终result_list格式为:"a", "bb", "ccc", "dddd", "eeeee", "ffffff" # 可直接使用或根据需求调整格式
注意事项
- 上述方法依赖
regex和loop扩展,若你的邮件服务不支持这两个扩展,纯Sieve环境下确实无法实现字符串拆分(标准Sieve未提供原生拆分能力)。 - 正则表达式
^\s*(\S+)(\s.*)?$会跳过开头空白、提取首个非空白单词,同时保留剩余字符串,循环直至所有单词提取完成。
内容的提问来源于stack exchange,提问作者HippoMan
相关产品推荐
相关产品推荐

