Bir altifadelerle (düzenli ifadeler) Sonsuz eşleşen yalnızca bir eşleşme döndürür

1 Cevap php

Ben (çok basitleştirilmiş) bu gibi normal bir ifade var:

^(ab)*$

Ve bu karşı uyan am:

abababababababab

Bunu aracılığıyla çalıştırmak preg_match:

preg_match('/$(ab)*$/', 'abababababababab', $matches);
print_r($matches);

Ben bu olsun:

Array
(
    [0] => abababababababab
    [1] => ab
)

Ben bekliyoruz puanlık bu:

Array
(
    [0] => abababababababab
    [1] => ab
    [2] => ab
    [3] => ab
    [4] => ab
    [5] => ab
    [6] => ab
    [7] => ab
    [8] => ab
}

Nasıl ben ne bekliyoruz alabilirim?

(Örneğin, ([aA][bB]), subexpression daha karmaşık olabileceğini unutmayın, ve ben bu konuda kendi sırayla eşleşen ifadeleri istiyorum.)

1 Cevap

preg_match_all bu gibi kullanarak bunu:

preg_match_all('/(ab)/', 'abababababababab', $matches);
print_r($matches);

preg_match sadece ilk maç sağlar ve preg_match_all aynı işlevselliğe sahiptir, ancak tüm döndüren unutmayın. Ayrıca şimdi düzenli ifade değiştiğini unutmayın. Eğer yıldız kullanırsanız, büyük olasılıkla ilk maçında tüm dizeyi tüketmek gerekir. Ancak, (ab)*? onu tembel durumuna yapmak gibi bir şey deneyebilirsiniz.