Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите с регуляркой  (Прочитано 11043 раз)
0 Пользователей и 1 Гость смотрят эту тему.
samlab
Гость
« : 16-03-2010 11:41 » 

Есть такая строчка
Код:
<td><b>0.088 $</b> (Тут вы можете взять себе немного копеек)</td>

Постоянно выражение (Тут вы можете взять себе немного копеек), а вот величина 0.088 меняется... Как составить регексп для того, чтобы 0.088 ( или другое число) выцепить. Просто, даже не представляю, как для русских букв регексп составить...
Подмогните, пожалуйста...
« Последнее редактирование: 16-03-2010 11:42 от samlab » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 16-03-2010 12:15 » 

а может быть ты будешь искать в тегах <b></b>
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #2 : 16-03-2010 14:17 » 

samlab, зачем тебе искать в русских буквах? Делай выражение по поиску только цифр!
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 16-03-2010 17:11 » 

Sla, McZim, мало ли на странице тегов <b>... Как раз опираться надо на константы. Другой вопрос, что если строку сменят, то выражение снова править, но универсального нет.

samlab, данное число можно выделить так:

Код:
(\d+\.\d+)

Добавь к нему константы спереди и сзади для локализации.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
samlab
Гость
« Ответ #4 : 16-03-2010 18:48 » 

Спасибо, но не работает  Жаль
Код:
#!/usr/bin/perl -w

my $test_string = <<"EOF";
<td><b>0.088 $</b> (Тут вы можете взять себе немного копеек)</td>
EOF

if ($test_string =~ m%<td><b>(\d+\.\d+)(Тут вы можете взять себе немного копеек))
{
  print "Yes: $1\n";
}
else
{
  print "No.\n";
}
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 16-03-2010 19:29 » 

samlab, все правильно — так работать не будет.

Для начала включаем голову (обязательное требование). Сравни строку в первом посте и что ты написал в выражении. Там очень много отличий.

Потом читаем описание регулярных выражений PCRE. В частности, почитай о спецсимволах. Если нужно вставить константу, а не спецсимвол, то его надо экранировать бекслешом (обрати внимание, как я экранировал спецсимвол "."). Регулярные выражения — штука не простая, но очень мощная и полезная. Т.ч. лучше изучить.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #6 : 16-03-2010 19:39 » 

RXL, хм дык я вроде о том же Улыбаюсь


samlab,

Код:
#!/usr/bin/perl

use strict;
use warnings;

my $t_string = "<td><b>0.088 </b> (Тут вы можете взять себе немного копеек)</td>";

if ($t_string =~ m/\d+\.\d+/)
{
  print "Yes: $&\n";
}
else
{
  print "No.\n";
}

Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
samlab
Гость
« Ответ #7 : 16-03-2010 20:34 » new

Спасибо, буду разбираться Улыбаюсь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines