【问题标题】:preg_match_all to get all occurrences of a stringpreg_match_all 获取所有出现的字符串
【发布时间】:2012-04-02 11:01:27
【问题描述】:

我正在尝试使用 preg_match_all 查找所有出现的偏移量

例如

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

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

$matches 是

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。

【问题讨论】:

    标签: php preg-match


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-30
      • 2012-09-14
      • 2021-03-30
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多