在2个字符串之间打印所有共同的零件



标题所说,我需要在2个字符串之间获得最长的常见子字符串。问题在于,如果有多个,我还需要打印所有公共零件。示例:

$ string1 =" asbafbae match1 asjdndrey match2 ";

$ string2 =" 12412342GT match1 hgm1g5m match2 ";

需要输出:match1,match2

这是我正在使用的代码,我设法获得了最长的常见子字符串,但只有一个。

<?php
function getLongestMatchingSubstring($str1, $str2)
{
    $len_1 = strlen($str1);
    $longest = '';
    for($i = 0; $i < $len_1; $i++){
        for($j = $len_1 - $i; $j > 0; $j--){
            $sub = substr($str1, $i, $j);
            if (strpos($str2, $sub) !== false && strlen($sub) > strlen($longest)){
                $longest = $sub;
                break;
            }
        }
    }
    return $longest;
}
$string1 = 'asbafbaeMATCH1asjdndreyMATCH2';
$string2 = '12412342gtMATCH1hgm1g5mMATCH2';
echo getLongestMatchingSubstring($string1, $string2);
?>

我得到 match1 作为输出。也许我正在编写的代码是专门为获得最长的代码。希望有人可以帮助我

我修改了您的功能以在数组中获得最长的匹配

<?php
function getLongestMatchingSubstring($str1, $str2)
{
    $len_1 = strlen($str1);
    $longest = array();
    for($i = 0; $i < $len_1; $i++){
        for($j = $len_1 - $i; $j > 0; $j--){
            $sub = substr($str1, $i, $j);
            if (strpos($str2, $sub) !== false && strlen($sub) > 1){
                $longest[] = $sub;
                $i = strpos($str1, $sub) + (strlen($sub)-1);
                break;
            }
        }
    }
    return $longest;
}
$string1 = 'asbaMbaeMATCH1asjdndreyMATCH22r5g7jdg3MATCH33';
$string2 = '1241M342gtMAThgMATCH1m1g5mMATCH2cghdiMATCH33';
print_r(getLongestMatchingSubstring($string1, $string2));

输出将为

array([0] => m [1] => match1 [2] => match2 [3] => match33(

最新更新