字符串順序匹配(相似度) php

剛來公司要從地址信息中提取籍貫,手頭有地區代碼表
例如:浙江省杭州市江乾區xx路xx號,或者浙江杭州江干xx路xx號,反正千奇百怪的地址花樣,
要把江乾區提取出來
試着用過字符匹配度,字符串包含等方法效果不甚理想
無意間瀏覽到了jianghuihong2012大神關於[回溯的字符串模式匹配]文章,然後自己發散了一下思維,有了下面這段代碼

<?php
function strmatch($str,$model){
    $i=0;
    $j=0;
    $num = 0;
    $res =array(0);                  //空數組預先存入一個0,防止max()報錯
    while($i<strlen($str)){             //$model的第一個字符和$str從第一個字符挨個比對
           if($str[$i]!=$model[$j]){    //如果  不相等j依舊等於0,一直停留在當前位置 i++ 直至相等或者跳出循環
                                        //如果不相等則$model 跳回第一個字符 j = 0 ,$str跳回 i+1-$num$num=0,繼續比對
               $j=0;
               $i+=1-$num;
               $num = 0;
           }else{                       //如果相等,(1)$num++,兩個字符串都移向下一位i++ j++,$num 存入數組 如果相等繼續(1$j++;
               $i++;
               $num++;
               $res[]=$num;
           }
            if ($num==strlen($model)){  //如果$model已經100%相似了,則跳出循環
                break;
            }
    }
        return max($res);                //返回$model$str順序最大相似度
}

        $str1 = "sdfsgdkg";                 //實例
        $str2 = "sgd";
        echo strmatch($str1,$str2);

輸出:這裏寫圖片描述

菜鳥一隻,爲記錄學習過程,也爲與各位交流,歡迎大神們指正交流

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章