Модераторы: ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите понять механизм, квантификатор 
V
    Опции темы
OutlawZ
  Дата 4.5.2015, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Добрый день, помогите понять рег выражение, т.е к примеру:

Код

$_ = 'aaa bbb ccc';
/(a{0,3})/;
print $1;


Выведет aaa это понятно так как {0,3} говорит 0,1,2,3 буквы а подряд. 
Дальше выражение а? это 0 или 1 символ а. Ок. это понятно. 

Код

$a = 'abc';
$a =~ /(abc){3,5}?/;
print $1, "\n";


Тогда почему тут не выводится abc  тут стоит ? в конце??? или тут ? играет как выражение которое говорит в том случае если abc идет 3,4,5 раз подрят что то вроде такого ["']? ?

Это еще можно понять но код что ниже просто ввел меня в ступор:
Код

my $b = 'abc';
$b =~ /(\w){2,}?/;
print $1, "\n";


Тут выводится b, если написать {1,} то напечатается a.  Просто как тут тогда работает механизм? он же должен выводить в том случае если к примеру a идет 2 раза подряд? а выводит только символ который соответствует позиции в выражении {1,}. или тут фишка в \w мол все символы [a-zA-Z0-9_], т.е ab считается так как удовлетворяют условие?  помогите понять почему так происходит и какую роль играет тут ?  он используется как выражение к примеру a? - a{0,1} или как ['"]? - если есть символы ' или " ?????? Заранее спасибо.


--------------------
user posted image
user posted image
PM MAIL   Вверх
alezzz
Дата 4.5.2015, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 11
Всего: 14



use re qw(Debug All);  - сложен в понимании, но простые выражения разобрать можно.

Цитата(OutlawZ @  4.5.2015,  15:12 Найти цитируемый пост)
Выведет aaa это понятно так как {0,3} говорит 0,1,2,3 буквы а подряд. Дальше выражение а? это 0 или 1 символ а. Ок. это понятно. код Perl1:2:3:$a = 'abc';$a =~ /(abc){3,5}?/;print $1, "\n";


Код

{n,m}?    Match at least n but not more than m times, not greedily

Это значит что найдет 3 раза 'abc' и не будет искать 5 раз. 

Цитата(OutlawZ @  4.5.2015,  15:12 Найти цитируемый пост)
Это еще можно понять но код что ниже просто ввел меня в ступор:код Perl1:2:3:my $b = 'abc';$b =~ /(\w){2,}?/;print $1, "\n";

Принцип тот-же, ищет по минимуму, т.е. 2, только в $1 запишется только 1 символ, причем последний из 2-х. Чтоб получить 'ab' нужно так написать:
Код

$b = 'abc';
$b =~ /((?:\w){2,}?)/;
print $1, "\n";



Это сообщение отредактировал(а) alezzz - 4.5.2015, 17:33
PM MAIL   Вверх
OutlawZ
Дата 5.5.2015, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Спасибо большое, теперь все встало на свои места )


--------------------
user posted image
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




[ Время генерации скрипта: 0.1120 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.