Je trouve la méthode substr_replace pour retourner des résultats amusants. Surtout lorsque vous travaillez avec des cordes url. Je viens d'écrire cette fonction. Il semble fonctionner parfaitement pour mes besoins. La fonction retournera la correspondance la plus longue possible par défaut.
function findOverlap($str1, $str2){
$return = array();
$sl1 = strlen($str1);
$sl2 = strlen($str2);
$max = $sl1>$sl2?$sl2:$sl1;
$i=1;
while($i<=$max){
$s1 = substr($str1, -$i);
$s2 = substr($str2, 0, $i);
if($s1 == $s2){
$return[] = $s1;
}
$i++;
}
if(!empty($return)){
return $return;
}
return false;
}
function replaceOverlap($str1, $str2, $length = "long"){
if($overlap = findOverlap($str1, $str2)){
switch($length){
case "short":
$overlap = $overlap[0];
break;
case "long":
default:
$overlap = $overlap[count($overlap)-1];
break;
}
$str1 = substr($str1, 0, -strlen($overlap));
$str2 = substr($str2, strlen($overlap));
return $str1.$overlap.$str2;
}
return false;
}
Utilisation pour obtenir le match de longueur maximale:
echo replaceOverlap("abxcdex", "xcdexfg"); //Result: abxcdexfg
Pour obtenir le premier match au lieu du dernier match appeler la fonction comme ceci:
echo replaceOverlap("abxcdex", "xcdexfg", “short”); //Result: abxcdexcdexfg
Pour obtenir la chaîne de chevauchement il suffit d'appeler:
echo findOverlap("abxcdex", "xcdexfg"); //Result: array(0 => "x", 1 => "xcdex")
C'est un problème à trouver le plus grand commun sous-chaîne: http://stackoverflow.com/questions/336605/how-can-i-find-the-largest-common-substring-between-two-strings-in-php – diyism