preg_match_all来获取所有出现的字符串

时间:2012-04-02 11:01:27

标签: php preg-match

我试图用preg_match_all

找到所有出现的偏移量

e.g。

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

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

$ matches is

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

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

        )

)

它从大海捞针返回第一组和第二组aa(“aa”“aa”“b”)的偏移量,而我期望它从索引1开始返回“aa”。

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 个答案:

答案 0 :(得分:4)

您需要更改针的表达式才能使用断言。这样可以防止第二个a被正则表达式引擎吃掉:

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