Neden bu preg_match 1 dönmüyor?

1 Cevap php

Ben bu kodu bakarak oldum ve bu benim $ giriş dizesi eşleşen ve Doları [0] mağazası 'test' maçları gerekiyordu

$input = ':testing';
$r = preg_match('/^(?<=\:).+/',$input,$matches);

Bunun nesi yanlış?

1 Cevap

(?<=) kapalı ifade eşleşen metin desen parantez içinde before pozisyon oluşması gerekir anlamına gelir, pozitif görünüm behind olduğunu. Bu durumda, o başlangıç-of-string pozisyonundan sonra (^), ama ilk gerçek karakterden önce (.+ burada dizesindeki karakterlerin tüm maçlar meydana gerektiği anlamına gelir ), ve o zamandan beri : ilk gerçek karakter ve hiçbir : : (tabii ki), bu maç için başarısız önce var.

Bunun yerine, ne muhtemelen yapmak istediğiniz bir capture group kullanmaktır, şöyle:

$input = ':testing';
$r = preg_match('/^:(.+)/',$input,$matches);

// $matches[0] has the entire text matched by the pattern, ":testing"
// $matches[1] will now contain "testing" from the first capture

Böylece $matches[1] istediğiniz ne olduğu, yakalama grup içinde metni almak için kullanabilirsiniz.