Forum Webscript.Ru

Программирование => Perl => Тема начата: Yaroslav от 18 Июня 2007, 19:02:14

Название: регулярные выражения
Отправлено: Yaroslav от 18 Июня 2007, 19:02:14
возможно ли вообще решить такую задачу как поиск с необязательными парраметрами

$text[1]="подарок, есть 10 штук";
$text[2]="подарок[15], есть 7 штук";
foreach (@text) {
  if (m/подарок, есть (.*) штук/) { $pod=1; $kol=$1; }
  if (m/подарок\\[(.*)\\], есть (.*) штук/) { $pod=$1; $kol=$2; }
}
Название: регулярные выражения
Отправлено: Phoinix от 18 Июня 2007, 19:22:20
Yaroslav
Если именно такие варианты как ты написал, то:

$text[1]="подарок, есть 10 штук";
$text[2]="подарок[15], есть 7 штук";
foreach my $text (@text) {
  ($pod=1, $kol=$1) = $text = /^(?:\\D+\\[(\\d*)\\]\\D+|[^\\[]+()[^\\]]+)(\\d*)\\D+$/;
}
Название: регулярные выражения
Отправлено: Yaroslav от 18 Июня 2007, 22:16:24
Phoinix
не работает :(
но натолкнуло на мысль :)
$text[1]="подарок, есть 10 штук";
$text[2]="подарок[15], есть 7 штук";
foreach (@text) {
  if (m/подарок(?:\\[(\\D+)\\]|), есть (\\d+) штук/) {
    $pod = $1 || 1;
    $kol = $2;
}
Название: регулярные выражения
Отправлено: Phoinix от 20 Июня 2007, 12:30:08
Yaroslav

Я не проверил код, только рег, а ты даже и не пытался разобраться...
Копипаст - рулит...

foreach my $text (@text) {
    my ($pod, $kol) = $text =~m /^(?:\\D+\\[(\\d*)\\]\\D+|[^\\[\\]]+?)(\\d+)\\D+$/;
    print $pod, $kol;
}

Можешь смело копировать и вставлять в свой код...
Пояснять не буду, раз тебе не нужно...
А вот использовать кириллицу в регулярных выражениях - рискованное занятие...