Почему этот preg_match не возвращает 1? - PullRequest
0 голосов
/ 18 мая 2010

Я просматривал этот код, и он должен совпадать с моей входной строкой $ и в $ match [0] магазине 'testing'

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

Что с этим не так?

1 Ответ

4 голосов
/ 18 мая 2010

(?<=) является положительным взглядом - за , что означает, что текст, соответствующий вложенному выражению, должен находиться за до позиции круглых скобок в шаблоне. В этом случае это означает, что это должно произойти после позиции начала строки (^), но до первого фактического символа (.+ соответствует всем символам в строке здесь), и так как : является первым действительным символом, и перед : (очевидно) нет :, оно не соответствует.

Вместо этого вы, вероятно, захотите использовать группу захвата , например:

$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

Таким образом, вы используете $matches[1], чтобы получить текст из группы захвата, что вам и нужно.

...