preg_match_all, чтобы получить все вхождения строки - PullRequest
1 голос
/ 02 апреля 2012

Я пытаюсь найти смещение всех вхождений с помощью preg_match_all

, например

$haystack = 'aaaab';
$needle = 'aa';

preg_match_all('/' . $needle . '/', $haystack, $matches);

$ совпадений -

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => aa
                    [1] => 0
                )

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

        )

)

Возвращает смещение первой и второй группы aa ("aa", "aa" "b") из стога сена, в то время как я ожидаю, что оно также возвратит "aa", начиная с индекса 1.

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => aa
                    [1] => 0
                )

            [1] => Array
                (
                    [0] => aa
                    [1] => 1
                )

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

        )

)

Есть ли способ, которым я могу исправить регулярное выражение или использовать какую-то другую функцию (которая принимает регулярное выражение), чтобы сделать это?

PS: я знаю strpos, который может это сделать, но у меня есть еще несколько вещей для поиска, поэтому я буду использовать preg_match_all.

1 Ответ

4 голосов
/ 02 апреля 2012

Вам понадобится изменить выражение иглы, чтобы использовать утверждение.Это предотвратит съедание 2-го a механизмом регулярных выражений:

$needle = 'a(?=a)';
...