Страница 1 из 1

Regexp

Добавлено: 2010-09-07 9:13:29
iye
Приветствую!
Не знал в какую тему запихнуть, но использую в контексте перла. Кто подскажет чем в регекспе '^' отличается от '\A' и '$' от '\z' ? Заранее благодарен за ответы.

Re: Regexp

Добавлено: 2010-09-07 9:33:20
skeletor
^ - начало строки
$ - конец строки
\A - символ А
\z - символ z

Re: Regexp

Добавлено: 2010-09-07 9:37:35
iye
Вы не правы. \A - в кэмлбуке написано "True в начале строки" \z то же в конце. + есть пример:

Код: Выделить всё

if ( $input !~ /\A\d+\z/ ) {
      return("input is NaN");
    }
Который должен смотреть цифирь у нас в инпуте или нет.

Re: Regexp

Добавлено: 2010-09-07 9:49:55
Гость

Re: Regexp

Добавлено: 2010-09-07 9:51:31
Гость
отличия только поддержкой первыми мульти лайн режима
\A \z не поддерживают его

Re: Regexp

Добавлено: 2010-09-07 10:13:22
skeletor
Не знал о таких возможностях.

Re: Regexp

Добавлено: 2010-09-07 10:15:29
iye
Спасибо!

Re: Regexp

Добавлено: 2010-09-16 17:18:06
iye
Приветствую!
Чтобы не плодить сущности напишу тут:
Под конец рабочего дня столкнулся вот с таким чудом:

Код: Выделить всё

 $title = "Lambada 2004";
$title =~ m/([0-4]*)/;
Не могу понять почему $1 - пустая строка .... если про звездочку на http://www.regular-expressions.info/reference.html ясно сказано:
Greedy, so as many items as possible will be matched

Re: Regexp

Добавлено: 2010-09-17 1:02:26
Гость
* - это от 0 и до инфинити
алгоритм примерно такой:
1) чё в паттерне? ага, цифры от 0 до 4, причём из-за * движок прекращает поиск, если не совпадает исследуемый символ с паттерном
2) первым исследуемым символом у нас идёт буква L, что не совпадает с [0-4]
3) ну вот и всё, значит в $1 пишем пустую строку

а был бы ([0-4]+), то движок бы искал по всей строке цифры от 0 до 4...

Re: Regexp

Добавлено: 2010-09-17 8:17:38
iye
Не понятно следующее: Почему * матчит только 1 символ (у нас ведь стоит не *?) - ведь он должен быть "жадным" и продолжать поиск до последнего...

Re: Regexp

Добавлено: 2010-09-17 10:22:25
Гость
...из-за * движок прекращает поиск, если исследуемый символ не совпадает с паттерном
2) первым исследуемым символом у нас идёт буква L, что не совпадает с [0-4]
Да, * - жадный символ, но (из man'a):
* Match 0 or more times
и с самого-самого начала строки "Lambda 2004" у нас получается буква "L", которая "Match 0 ..." для паттерна [0-4] =>
* не матчит в данном случае ничего и в $1 ничего не заносит.

Вот другой пример: если бы входная строка была бы "2004 Lambda", то в $1 у нас бы запихнулось 2004 (он ведь "жадный", а это значит он бы в $1 заносил цифры до тех пор, пока ещё действует паттерн [0-4]), потому что начиная с самого первого символа уже начинаются цифры, которые находятся в паттерне [0-4].
Но если перед 2004 поставим хоть что-то, что не совпадает с [0-4], то всё, в $1 будет пустая строка.

Re: Regexp

Добавлено: 2010-09-17 11:15:13
iye
Спасибо!