You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带?通配符的摩尔斯码字符串匹配查询及实现函数咨询

实现带问号通配符的摩尔斯码匹配函数

看起来你已经搭好了摩尔斯码到字母的映射框架,现在需要补全核心匹配逻辑——让输入的带?通配符的字符串能找出所有符合规则的摩尔斯码对应的字母对吧??在这里代表可以匹配任意单个摩尔斯码字符(.或-),我来帮你完成这个函数:

function find_possible_match( $criteria ) {
    $possible_match = array();
    $possibilities = array(
        "a"=>".-", "b"=>"-...", "c"=>"-.-.", "d"=>"-..", "e"=>".",
        "f"=>"..-.", "g"=>"--.", "h"=>"....", "i"=>"..", "j"=>".---",
        "k"=>"-.-", "l"=>".-..", "m"=>"--", "n"=>"-.", "o"=>"---",
        "p"=>".--.", "q"=>"--.-", "r"=>".-.", "s"=>"....."
    );

    // 把通配符?转换成正则匹配规则,匹配任意单个摩尔斯字符
    $regex_pattern = '/' . str_replace('?', '[.-]', preg_quote($criteria, '/')) . '/';

    // 遍历所有摩尔斯码映射项,逐一匹配
    foreach ($possibilities as $letter => $morse) {
        // 同时校验模式匹配和长度一致,避免部分匹配的错误
        if (preg_match($regex_pattern, $morse) && strlen($morse) === strlen($criteria)) {
            $possible_match[] = $letter;
        }
    }

    return $possible_match;
}

核心逻辑说明:

  • 正则转换:先用preg_quote转义输入中的特殊字符(避免和正则语法冲突),再把?替换成[.-],这样就能精准匹配任意单个摩尔斯码符号。
  • 长度校验:额外加了长度相等的判断,比如输入是..时,不会误匹配长度更长的.....(对应s),保证匹配的严谨性。
  • 结果收集:所有符合条件的字母会被存入结果数组,最终返回给调用方。

测试示例:

  • 调用find_possible_match("..?")会返回["f"](f的摩尔斯码..-.完全匹配..?的模式,长度也一致);
  • 调用find_possible_match(".?")会返回["a"](a的.-刚好匹配.?的双字符模式)。

内容的提问来源于stack exchange,提问作者Mueyiwa Moses Ikomi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:05:09