Regexp
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
- skeletor
- майор
- Сообщения: 2548
- Зарегистрирован: 2007-11-16 18:22:04
Re: Regexp
^ - начало строки
$ - конец строки
\A - символ А
\z - символ z
$ - конец строки
\A - символ А
\z - символ z
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Regexp
Вы не правы. \A - в кэмлбуке написано "True в начале строки" \z то же в конце. + есть пример:
Который должен смотреть цифирь у нас в инпуте или нет.
Код: Выделить всё
if ( $input !~ /\A\d+\z/ ) {
return("input is NaN");
}
-
- проходил мимо
-
- проходил мимо
Re: Regexp
отличия только поддержкой первыми мульти лайн режима
\A \z не поддерживают его
\A \z не поддерживают его
- skeletor
- майор
- Сообщения: 2548
- Зарегистрирован: 2007-11-16 18:22:04
Re: Regexp
Не знал о таких возможностях.
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Regexp
Спасибо!
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Regexp
Приветствую!
Чтобы не плодить сущности напишу тут:
Под конец рабочего дня столкнулся вот с таким чудом:
Не могу понять почему $1 - пустая строка .... если про звездочку на http://www.regular-expressions.info/reference.html ясно сказано:
Чтобы не плодить сущности напишу тут:
Под конец рабочего дня столкнулся вот с таким чудом:
Код: Выделить всё
$title = "Lambada 2004";
$title =~ m/([0-4]*)/;
Greedy, so as many items as possible will be matched
-
- проходил мимо
Re: Regexp
* - это от 0 и до инфинити
алгоритм примерно такой:
1) чё в паттерне? ага, цифры от 0 до 4, причём из-за * движок прекращает поиск, если не совпадает исследуемый символ с паттерном
2) первым исследуемым символом у нас идёт буква L, что не совпадает с [0-4]
3) ну вот и всё, значит в $1 пишем пустую строку
а был бы ([0-4]+), то движок бы искал по всей строке цифры от 0 до 4...
алгоритм примерно такой:
1) чё в паттерне? ага, цифры от 0 до 4, причём из-за * движок прекращает поиск, если не совпадает исследуемый символ с паттерном
2) первым исследуемым символом у нас идёт буква L, что не совпадает с [0-4]
3) ну вот и всё, значит в $1 пишем пустую строку
а был бы ([0-4]+), то движок бы искал по всей строке цифры от 0 до 4...
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Regexp
Не понятно следующее: Почему * матчит только 1 символ (у нас ведь стоит не *?) - ведь он должен быть "жадным" и продолжать поиск до последнего...
-
- проходил мимо
Re: Regexp
Да, * - жадный символ, но (из man'a):...из-за * движок прекращает поиск, если исследуемый символ не совпадает с паттерном
2) первым исследуемым символом у нас идёт буква L, что не совпадает с [0-4]
и с самого-самого начала строки "Lambda 2004" у нас получается буква "L", которая "Match 0 ..." для паттерна [0-4] =>* Match 0 or more times
* не матчит в данном случае ничего и в $1 ничего не заносит.
Вот другой пример: если бы входная строка была бы "2004 Lambda", то в $1 у нас бы запихнулось 2004 (он ведь "жадный", а это значит он бы в $1 заносил цифры до тех пор, пока ещё действует паттерн [0-4]), потому что начиная с самого первого символа уже начинаются цифры, которые находятся в паттерне [0-4].
Но если перед 2004 поставим хоть что-то, что не совпадает с [0-4], то всё, в $1 будет пустая строка.
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Regexp
Спасибо!