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

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

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

 

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

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

тема: Парсинг SELECT
 
 автор: Ильдар   (01.11.2010 в 16:12)   письмо автору
 
 

Имеется код:
<select name="select0" id="select0" style="height:18; font-size:8pt ; color:#555555" onChange="javascript:checkSelValue(1, 'F');">
<option value="">Please select.</option>
<option value="">----------</option>
<option value="050446340" selcode="50446340" imgurl="">black</option>
<option value="050446342" selcode="50446342" imgurl="">grey</option>
<option value="050446343" selcode="50446343" imgurl="">white</option>
<option value="050446341" selcode="50446341" imgurl="">red</option>
</select>


Хочу вытащить value, selcode и имя option
Пробую:
<?php preg_match_all('|<option.*value="(.*)".*selcode="(.*)".*>(.*)</option>|isU'$text$out5); ?>

Так результат получается кривой:
Array
(
[0] => Array
(
[0] => Please select. ---------- Black
[1] => Navy
[2] => Brown
[3] => Gray
)

[1] => Array
(
[0] =>
[1] => 050446342
[2] => 050446343
[3] => 050446341
)

[2] => Array
(
[0] => 50446340
[1] => 50446342
[2] => 50446343
[3] => 50446341
)

[3] => Array
(
[0] => Black
[1] => Navy
[2] => Brown
[3] => Gray
)

)

НЕ ПОЙМУ ГДЕ Я СДЕЛАЛ НЕПРАВИЛЬНО???

  Ответить  
 
 автор: .....   (01.11.2010 в 17:37)
 
   для: Ильдар   (01.11.2010 в 16:12)
 

всмысле почему совпадает с value="" из одного тега и selcode="50446340 из другого ?

<option value="">----------</option>
<option value="050446340" selcode="50446340" imgurl="">black</option>

нужно добавлять header('content-type: text/plain'); в начале таких скриптов с print_r() или var_dump()
, или смотреть исходный html-код в браузере
может быть надо внутри тега [^>*] вместо .*

  Ответить  
 
 автор: Tonik992   (01.11.2010 в 17:58)   письмо автору
 
   для: Ильдар   (01.11.2010 в 16:12)
 

Сравни свою регулярку и мною переделанную:

<?php
preg_match_all
('|<option.*value="(.*)".*selcode="(.*)".*>(.*)</option>|isU'$text$out5); //твоя
preg_match_all('|<option\s*value="([^\"]+)"\s*selcode="([^\"]+)".*>(.+)</option>|isU'$string$out5); //моя
?>

результат моей:
<?php
Array
(
    [
0] => Array
        (
            [
0] => <option value="050446340" selcode="50446340" imgurl="">black</option>
            [
1] => <option value="050446342" selcode="50446342" imgurl="">grey</option>
            [
2] => <option value="050446343" selcode="50446343" imgurl="">white</option>
            [
3] => <option value="050446341" selcode="50446341" imgurl="">red</option>
        )

    [
1] => Array
        (
            [
0] => 050446340
            
[1] => 050446342
            
[2] => 050446343
            
[3] => 050446341
        
)

    [
2] => Array
        (
            [
0] => 50446340
            
[1] => 50446342
            
[2] => 50446343
            
[3] => 50446341
        
)

    [
3] => Array
        (
            [
0] => black
            
[1] => grey
            
[2] => white
            
[3] => red
        
)

)
?>


Твой результат получился неожиданным из-за модификатора U.. Посмотри подробнее, как работают жадные/нежадные квантификаторы

  Ответить  
 
 автор: Ильдар   (01.11.2010 в 18:46)   письмо автору
 
   для: Tonik992   (01.11.2010 в 17:58)
 

вот честно, я так и грешил на этот модификатор, только не мог дойти до него. Спасибо огромное! Теперь понял

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

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