Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Регулярка - в чем ошибка?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Itan
Отправлено: 05 Октября, 2016 - 20:39:46
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Здравствуйте!

Есть такие строки:
CODE (htmlphp):
скопировать код в буфер обмена
  1.                                         <option value="15010"
  2.  
  3.                                                                                                                                                                                        
  4.                                                                        
  5.                                                                
  6.                                                                                                                                                                                 data-groups_model="1"
  7.                                                                                                                
  8.                                                                                                                         data-name="priora"
  9.                                                        
  10.                                                        
  11.                                                                                                                 >
  12.                                                 PRIORA</option>
  13.                                                        
  14.                                                        
  15.                                        
  16.  
  17.                                         <option value="15068"
  18.  
  19.                                                                                                                                                                                        
  20.                                                                        
  21.                                                                
  22.                                                                                                                                                                                                                                         data-groups_model_id="15010"
  23.                                                        
  24.                                                                                                                         data-name="2170_priora_sedan"
  25.                                                        
  26.                                                        
  27.                                                                                                                         data-title_rus="Приора седан"
  28.                                                                                                                 >
  29.                                                 2170 PRIORA СЕДАН</option>


Грубо говоря, нужно достать всё, что между <option></option>, исключая строки, где встречается
CODE (htmlphp):
скопировать код в буфер обмена
  1. data-groups_model="1"


Пока дошел только до такого варианта:
PHP:
скопировать код в буфер обмена
  1. preg_match_all('~<option value=".+[^data-groups_model="1"]+data-name=".+>\s+(.+)</option>~Uis', $select_text[1], $name_ru);


Но, блин, мое исключение не работает, как я планировал, регулярка вытаскивает все строки, даже есть там в параметрах тега есть "data-groups_model="1"

Как бы мне это сделать? И желательно, чтобы не было пробелов, потому что в исходных данных куча пробелов и табуляций. \s+ не помогает почему-то.
(Добавление)
По задумке, из исходного текста должно вернуться только Array("2170 PRIORA СЕДАН")
(Добавление)
Короче, за неимением лучшего, придумал такой велосипед:
PHP:
скопировать код в буфер обмена
  1. # Разбиваем на массив
  2. $explode_option_tag = explode('</option>', $select_text[1]);
  3.  
  4. # Удаляем строки, где нет data-name и строки, где есть data-groups_model="1"
  5. for($x = 0; $x < count($explode_option_tag); $x++) {
  6.         if (!strpos($explode_option_tag[$x], 'data-name')) {
  7.                 unset($explode_option_tag[$x]);
  8.         }
  9.  
  10.         if (strpos($explode_option_tag[$x], 'data-groups_model="1"') !== false) {
  11.                 unset($explode_option_tag[$x]);
  12.         }
  13. }
  14.  
  15. # Объединяем обратно
  16. $text = implode('</option>', $explode_option_tag);
  17.  
  18. # Берем все что между <option></option>
  19. preg_match_all('~<option.+>\s+(.+)</option>~Uis', $text, $name_ru);
  20.  
  21. # Выводи, удалив пробелы и табуляцию
  22. for ($x = 0; $x < count($name_ru[1]); $x++) {
  23.         print trim($name_ru[1][$x])."\n";
  24. }
 
 Top
Fart
Отправлено: 06 Октября, 2016 - 10:57:45
Post Id



Посетитель


Покинул форум
Сообщений всего: 324
Дата рег-ции: Июль 2016  


Помог: 10 раз(а)




так попробуй если еще нужно будет

Спойлер (Отобразить)


(Добавление)
пример переделал, так как регулярка не учитывала добавления следующих похожих вариантов.

глобальный поиск:

Спойлер (Отобразить)

(Отредактировано автором: 06 Октября, 2016 - 12:23:22)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB