Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите составить рег выражение
 
 автор: OLi   (16.06.2010 в 00:16)   письмо автору
 
 

Для выдирания текста (выделено жирным)
<td class="rates" style="padding-top: 15px; padding-bottom: 5px; padding-left: 10px;" align="left"><img src="images/rates/usd.gif">&nbsp;&nbsp;USD&nbsp;&nbsp; 12.9049</td>

  Ответить  
 
 автор: Gubichev   (16.06.2010 в 01:04)   письмо автору
 
   для: OLi   (16.06.2010 в 00:16)
 

<?php
$str
="<td class=\"rates\" style=\"padding-top: 15px; padding-bottom: 5px; padding-left: 10px;\" align=\"left\"><img src=\"images/rates/usd.gif\">&nbsp;&nbsp;USD&nbsp;&nbsp; 12.9049</td>";
preg_match("#([\d]+\.[\d]+)#i",$str,$out);
echo 
$out[1];
?>

  Ответить  
 
 автор: OLi   (16.06.2010 в 01:40)   письмо автору
 
   для: Gubichev   (16.06.2010 в 01:04)
 

Находит не все числа, просмотрел массив.....

  Ответить  
 
 автор: Gubichev   (16.06.2010 в 03:13)   письмо автору
 
   для: OLi   (16.06.2010 в 01:40)
 

А какие числа не находит? Возможно целые?
P.S. Если нужно найти больше одной подстроки (более одного числа) в одном тексте, тогда используйте preg_match_all

  Ответить  
 
 автор: OLi   (16.06.2010 в 12:27)   письмо автору
 
   для: Gubichev   (16.06.2010 в 03:13)
 

Ответ прям в ТОЧКУ! Спасибо, помогло!

  Ответить  
 
 автор: neadekvat   (16.06.2010 в 02:13)   письмо автору
 
   для: OLi   (16.06.2010 в 00:16)
 

[поправлено модератором]

  Ответить  
 
 автор: вред   (16.06.2010 в 10:02)
 
   для: neadekvat   (16.06.2010 в 02:13)
 

А парсер на месте парсера применяет "жадный" поиск: пока есть совпадения с повторяющимся шаблоном, они будут включаться в результат. Получается:

Как минимум одна цифра (если есть больше цифр, то все, что есть), точка, затем как минимум одна цифра (если есть больше цифр, то все, что есть).

Жадность выключается во всём жаблоне модификатором U, либо для конкретного квантификатора с помощью знака "?":
\d+?
будет совпадать с минимальным количеством цифр (если это и есть весь шаблон, то будет совпадать с одной цифрой).

  Ответить  
 
 автор: OLi   (16.06.2010 в 12:22)   письмо автору
 
   для: вред   (16.06.2010 в 10:02)
 

Если честно мало что понял, а именно как подредактировать, чтоб по шаблону находились все числа Формата 23.3242...Сейчас парсер находит только первое вхождение и заносит в массив...Дальше не парсит!

  Ответить  
 
 автор: вред   (16.06.2010 в 13:03)
 
   для: OLi   (16.06.2010 в 12:22)
 

Выше уже советовали вместо preg_match использовать preg_match_all
После "слепой" замены можно просмотреть структуру выходного массива с помощью:
print_r($out);

  Ответить  
 
 автор: neadekvat   (16.06.2010 в 12:41)   письмо автору
 
   для: вред   (16.06.2010 в 10:02)
 

Мой пост удалили :'( Можно было и только первые слова удалить.
Не проще ли поставить в качестве второго параметра [^<]

  Ответить  
 
 автор: Gubichev   (16.06.2010 в 13:28)   письмо автору
 
   для: neadekvat   (16.06.2010 в 12:41)
 

А чем плох [\d]+ ?

  Ответить  
 
 автор: Trianon   (16.06.2010 в 13:44)   письмо автору
 
   для: Gubichev   (16.06.2010 в 13:28)
 

тем, что автор не сказал, чего там в теге у него выделено. (вернее сказал, что у него там текст.)
Вдруг там не только число может появиляться...

  Ответить  
 
 автор: OLi   (16.06.2010 в 19:14)   письмо автору
 
   для: Trianon   (16.06.2010 в 13:44)
 

А вот как выдернуть Текст из
<b class=" m22gray">Чт.</b>

  Ответить  
 
 автор: t3ma   (17.06.2010 в 12:20)   письмо автору
 
   для: OLi   (16.06.2010 в 19:14)
 

<?php
preg_match 
("#/<b\sclass=\"\sm22gray\">([^<]+)#"$text$matches);
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования