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

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

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

 

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

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

тема: Парсинг <SELECT>
 
 автор: Trunk   (04.08.2010 в 14:43)   письмо автору
 
 


<select class="vi-is1-jsSelect" id="63" name="Waist Size">
<option value="-1">- Select -</option>
<option value="1">28</option>
<option value="2">29</option>
<option value="3">30</option>
<option value="4">36</option>
</select>

Нужно соответственно спарсить
<option value="1">28</option>
<option value="2">29</option>
<option value="3">30</option>
<option value="4">36</option>


Проблема в том, что количество <option> не известна, + еще недостаточно знаний в рег.экспах.

Грубо говоря в шаблоне сказать, что ищем <select class="vi-is1-jsSelect" id="63" name="Waist Size">, как нашли ищем <option value="([0-9]+)">([0-9]+)</option> до тех пор пока не дойдем до </select>. Такое возможно? Или нужно другую логику?

  Ответить  
 
 автор: Tonik992   (05.08.2010 в 10:31)   письмо автору
 
   для: Trunk   (04.08.2010 в 14:43)
 

<?php
$string 
'<select class="vi-is1-jsSelect" id="63" name="Waist Size">
<option value="-1">- Select -</option>
<option value="1">28</option>
<option value="2">29</option>
<option value="3">30</option>
<option value="4">36</option>
</select> '
;
$pattern "/(?:<select.+>)(.+)(?:<\/select>)/isU";
preg_match_all($pattern$string$matches);
$pattern "/<option[^>]+value=\"[0-9]+\"[^>]*>[0-9]+<\/option>/isU";
preg_match_all($pattern,$matches['1']['0'],$matches2);
print_r($matches2);
?>

У меня получилось в два захода

  Ответить  
 
 автор: sim5   (05.08.2010 в 16:16)   письмо автору
 
   для: Tonik992   (05.08.2010 в 10:31)
 

Ну, если искать именно в такой строке, и это один список (хотя по имени найти не сложно) то рег. выражений не надо:
<?
$string 
'<select class="vi-is1-jsSelect" id="63" name="Waist Size"> 
<option value="-1">- Select -</option> 
<option value="1">28</option> 
<option value="2">29</option> 
<option value="3">30</option> 
<option value="4">36</option> 
</select>'
;

echo 
htmlspecialchars(rtrim(strstr($string'<option'), '</select>,</SELECT>'));

  Ответить  
 
 автор: Trunk   (08.08.2010 в 16:01)   письмо автору
 
   для: Tonik992   (05.08.2010 в 10:31)
 

Большое спасибо за помощь!

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

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