查找重叠

时间:2017-03-15 02:22:58

标签: php regex preg-match-all substring overlapping-matches

您好我试图在字符串中找到所有重叠的子字符串,这是我的代码,它只能找到非重复的ACA。

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

1 个答案:

答案 0 :(得分:1)

您正在使用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
        )

)

Demo

如果您真正担心的是它只计算ACACA一次,那么,有三件事情需要说明:

  1. 这与正则表达式基本上是不可避免的。
  2. 你真的不应该算两次,因为它重叠了。这不是模式的真正复发。
  3. 那就是说,如果你想计算两次,你可以这样做:

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

    输出:

    4
    

    Demo

相关问题