Найти все подстроки в строке с перекрытием

Привет, я пытаюсь найти все перекрывающиеся подстроки в строке, вот мой код его единственное нахождение неповторяющегося ACA.

$haystack = "ACAAGACACATGCCACATTGTCC";
$needle = "ACA";
echo preg_match_all("/$needle/", $haystack, $matches);

2

Решение

Вы используете echo напечатать возвращаемое значение preg_match_all, То есть вы отображаете только количество найденных совпадений. То, что вы, вероятно, хотели сделать, было что-то вроде print_r($matches);, как это:

$haystack = "ACAAGACACATGCCACATTGTCC";
$needle = "ACA";
preg_match_all("/$needle/", $haystack, $matches);
print_r($matches);

Выход:

Array
(
[0] => Array
(
[0] => ACA
[1] => ACA
[2] => ACA
)

)

демонстрация

Если вы действительно обеспокоены тем, что это считается ACACA только один раз, ну, есть три вещи, которые нужно сказать об этом:

  1. Это в принципе неизбежно с регулярным выражением.
  2. Вы действительно не должны считать это дважды, потому что это частично совпадает. Это не реальное повторение шаблона.
  3. Тем не менее, если вы хотите посчитать это дважды, вы можете сделать это примерно так:

    echo preg_match_all("/(?=$needle)/", $haystack, $matches);
    

    Выход:

    4
    

    демонстрация

1

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

Других решений пока нет …

По вопросам рекламы [email protected]