Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > все простенько, но не работает


Автор: burakov 12.8.2013, 14:32
Добрый день.

От данного кода 

Код

use strict;
use warnings;
use locale;

my $str = 'example1 example2';
while ($str =~ /(.+?)\s+(.+?)/sg) {
    print $1 ."\n";
    print $2 ."\n";
}



на принт идет

example1
e

вместо ожидаемого 

example1
example2


ПОЧЕМУ ТАК?!


спасибо.

Автор: ginnie 12.8.2013, 15:40
Потому, что (.+?) - один или более любых символов минимальной длины (т.е., в Вашем выражении, всегда один символ).

Автор: burakov 12.8.2013, 16:18
не понимаю
в первом же случае ищет правильно?
"один или более"

можете подсказать как нужно правильно написать?

чтобы во втором случае попадало в "найденное" все слово, а не первая буква

спасибо.


Автор: Jimy 12.8.2013, 16:22
/(.+?)\s+(.+?)$/
или
/(.+?)\s+(.+)/

Автор: burakov 12.8.2013, 16:24
а.. понял. ему нужна правая граница.
спасибо, большое.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)