2012-04-02 4 views
1

はpreg_match_allpreg_match_allは、私がしようとしています

例えばに出現するすべてのオフセットを見つけるために、文字列の出現をすべて取得するには

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

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

$試合は、私が「返すようにそれを期待していながら、それは、干し草の山からAA( "AA"、 "AA"、 "B")の第一および第二のグループのオフセットを返します

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

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

     ) 

) 

です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

アサーションを使用するには、針式を変更する必要があります。これにより正規表現エンジンによって2番目のaが食べられなくなります。

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

これは機能します。ありがとうTim! – i5z

関連する問題