剛來公司要從地址信息中提取籍貫,手頭有地區代碼表
例如:浙江省杭州市江乾區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);
輸出:
菜鳥一隻,爲記錄學習過程,也爲與各位交流,歡迎大神們指正交流