2012-04-02 69 views
1

我试图找到与preg_match_allpreg_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一起使用。

回答

4

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

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

它的工作原理。谢谢蒂姆! – i5z 2012-04-03 05:05:52