带?通配符的摩尔斯码字符串匹配查询及实现函数咨询
实现带问号通配符的摩尔斯码匹配函数
看起来你已经搭好了摩尔斯码到字母的映射框架,现在需要补全核心匹配逻辑——让输入的带?通配符的字符串能找出所有符合规则的摩尔斯码对应的字母对吧??在这里代表可以匹配任意单个摩尔斯码字符(.或-),我来帮你完成这个函数:
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
相关产品推荐
相关产品推荐

