Как найти самую длинную подстроку с помощью регулярных выражений в PHP?

У меня есть следующий массив:

$array = array("6", "66", "67", "68", "69", "697", "698", "699");

У меня есть следующие строки:

"69212345", "6209876544", "697986546"

Я хочу найти элемент массива, который соответствует самой длинной части от начала строки, т.е.

  • для «69212345» будет выбрано значение «69».

  • для «6209876544» будет выбрано значение «6».

  • для «697986546» будет выбрано значение «697».

Как мне этого добиться?

-8

Решение

попробуйте решение ниже:

$array = array("6", "66", "67", "68", "69", "697", "698", "699");

$str = '697986546';
//get all matched valuew
$new_arr = array_filter($array, function ($val) use ($str) {
return (strpos($str, $val) !== false);
});

print_r($new_arr);
if ($new_arr) {
//sort data by string length
usort($new_arr, function ($a, $b) {
return strlen($b) - strlen($a);
});
print_r($new_arr);

echo "longest value is - " . $new_arr[0];
}

выход:

Array
(
[0] => 6
[4] => 69
[5] => 697
)
Array
(
[0] => 697
[1] => 69
[2] => 6
)
longest value is - 697
0

Другие решения

Это должно работать для вас:

Просто переберите свой массив и проверьте, существует ли значение в вашей строке с помощью strpos() и если плюс, он длиннее самой длинной подпоследовательности, вы можете переназначить ее, например,

$longestSubsequence = "";
foreach($array as $v){

if(strpos($str, $v) !== FALSE && strlen($v) > strlen($longestSubsequence ))
$longestSubsequence = $v;

}
echo $longestSubsequence;
0

Попробуйте это решение, используя substr ():

<?php
$match = "";
$array = array("6", "66", "67", "68", "69", "697", "698", "699");
$strings = array("69212345", "6209876544", "697986546");
for ($i=0; $i < count($strings); $i++) { //loop to get the $string values
for ($ii=0; $ii < sizeof($array); $ii++) { //loop to get the $array values
for ($iii=0; $iii < strlen($strings[$i]); $iii++) { //this loop will increment until the end of the string to compare the array if it matches the substr() of $strings
if (substr($strings[$i], 0, $iii + 1) == $array[$ii]) {
$match = $array[$ii];
}
}
}
echo "for \"" . $strings[$i] . "\" array value \"" . $match . "\" will be selected<br>";
}
?>

Выход:

for "69212345" array value "69" will be selected
for "6209876544" array value "6" will be selected
for "697986546" array value "697" will be selected
-1
По вопросам рекламы [email protected]