Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Регулярное выражение


Автор: xolod 6.6.2006, 17:12
Из такой гадости
Код

<tr bgcolor="#ffffff">
<td align="right" >036</td>
<td align="left" >&nbsp;&nbsp;AUD</td>
<td align="right" >1</td>
<td>&nbsp;&nbsp;Австралийский доллар</td>
<td align="right">20,5653</td>
</tr>

<tr bgcolor="#ffffff">
<td align="right" >124</td>
<td align="left" >&nbsp;&nbsp;CAD</td>
<td align="right" >1</td>
<td>&nbsp;&nbsp;Канадский доллар</td>
<td align="right">24,1295</td>
</tr>

выдираем значения между <td></td> везде
Код

$pattern = '|<tr\s+bgcolor\=\"\#ffffff\"[^>]*?>.*?<td[^>]*?>([0-9]){3}</td>.*?<td[^>]*?>(.*)</td>.*?<td[^>]*?>([0-9]+)</td>.*?<td[^>]*?>(.*)</td>.*?<td[^>]*?>([0-9\,]+)</td>.*?</tr>|ims';
preg_match_all($pattern, $page, $matches);
/* И распечатаем для наглядности */
echo('<pre>');
print_r($matches);
echo('</pre>');


То, что возвращает, похоже на правду, но чую — гадость. Наверняка где-то ошибся, но никак не пойму где. Свежим взглядом может окинет кто-нибудь. Спасибо заранее!

Автор: sugee 6.6.2006, 18:03
 А  зачем всё так сложно?
Регулярку бы я так записал
Код

$pattern = '|<td.*>&nbsp;*(.*)<\/td>|ims';
  

Автор: Mal Hack 6.6.2006, 18:10
Модератор: есть же раздел для регулярок.
Модератор: Название темы должно отражать ее суть!
 

Автор: Azazel 7.6.2006, 12:20
Цитата(sugee @ 6.6.2006,  18:03)
А  зачем всё так сложно?
Регулярку бы я так записал
Код

$pattern = '|<td.*>&nbsp;*(.*)<\/td>|ims';

Вы слышали когда-нибудь о "жадности" квантификаторов?smile)))

Смысл регулярки дали правильный, но оформили его очень криво.

Код

$pattern = '/<td.*?>(.*?)<\/td>/is';
 

Автор: xolod 7.6.2006, 14:58
Цитата(Azazel @  7.6.2006,  12:20 Найти цитируемый пост)
Вы слышали когда-нибудь о "жадности" квантификаторов?)))

Умник?

Регулярка типа
Код

$pattern = '/<td.*?>(.*?)<\/td>/is';

не поможет. Но я устал уже объяснять почему, malhack все резал вчера, настроение не очень видимо было :).

По теме — все сделал. Перед закрывающимся </tr> надо удалить инвертирования жадности и убрать модификатор m.
Всем спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)