正如标题所说,我需要获得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 作为输出。也许我写的代码专门用来获得最长的代码。希望有人能帮助我
答案 0 :(得分:0)
我修改了你的函数以获得数组中最长的匹配
<?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));
输出将是
数组([0] =&gt; M [1] =&gt; MATCH1 [2] =&gt; MATCH2 [3] =&gt; MATCH33)