Xpoint
   [напомнить пароль]

Регулярное выражение

Метки: [без меток]
2012-05-04 00:30:05 [обр] Marselka[досье]

$_ = "Happy new 2004 year";
/^.*(\d+) year$/;

Почему после выполнения скрипта значение $1 будет равно 4, а не 2004?

Заранее спасибо за ответ.

С уважением, Марсель.

спустя 1 час 10 минут [обр] Marat Tanalin(0/78)[досье]
Измените «жадность» предшествующего квантификатора путём замены .* на .*?.
спустя 27 минут [обр] Marselka[досье]
Большое спасибо! меня просто интересует чисто с семантической точки зрения,почему выражение исполняется именно так) не подскажите?
спустя 13 минут [обр] Marat Tanalin(0/78)[досье]

По умолчанию квантификатор .* жадный, поэтому по пути от начала строки к её концу захватывает максимум символов, соответствующих определению «что угодно» — в том числе и цифры («200»), за исключением последней («4»), которую он вынужден «уступить» следующей части регулярного выражения — \d+.

В общем случае для получения максимально предсказуемого результата полезно всегда ограничивать жадность по умолчанию.

спустя 18 минут [обр] Marselka[досье]
Огромное Вам спасибо!!! Просто исчерпывающий ответ))Дай Бог Вам здоровья)
Powered by POEM™ Engine Copyright © 2002-2005