Автор Тема: регулярные выражения  (Прочитано 4212 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
регулярные выражения
« : 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

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
регулярные выражения
« Ответ #1 : 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

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
регулярные выражения
« Ответ #2 : 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

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
регулярные выражения
« Ответ #3 : 20 Июня 2007, 12:30:08 »
Yaroslav

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

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

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28