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 :: preg_match offset

 PHP.SU

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


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

> Описание: Пропуск первого вхождения
SKDzR
Отправлено: 12 Августа, 2010 - 16:31:04
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Нояб. 2009  
Откуда: Россия -- Дзержинск


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




Доброе время суток, подскажите, пожалуйста, как сделать пропуск первого вхождения?Т.е. есть документ с содержимым, например:
CODE (html):
скопировать код в буфер обмена
  1. <body>
  2.  
  3. <table><tr><td>
  4. {topnews gogo=123 razvda=yes}
  5. </td></tr></table>
  6.  
  7. <table><tr><td>
  8. {topnews gogo=852 razvda=no}
  9. </td></tr></table>
  10.  
  11. </body>


Используется:
PHP:
скопировать код в буфер обмена
  1. preg_match ( "#\{topnews (.*)\}#", $tpl->copy_template, $matches );

парсит только первую строку {topnews}, на вторую внимания не обращает. а нужно мне наоборот, чтобы первую пропустил, а начал со второй.

Спасибо.
 
 Top
JustUserR
Отправлено: 13 Августа, 2010 - 02:19:57
Post Id



Активный участник


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


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




SKDzR пишет:
Парсит только первую строку {topnews}, на вторую внимания не обращает. а нужно мне наоборот, чтобы первую пропустил, а начал со второй
В вашем случае при осуществлении поиска заданной подстроки по шаблону для любого символа - используется жадная модификация квантификатора * что приводит к тому что в найденное соответствии попадают все данные - от первого вхождения шаблона до .* до последнего вхождения после него Для осуществления выборки только одного требуемого элемента можно использовать соответствующий нежадный квантификатор записываемый синтаксически как .*? - а для пропуска первого вхождения можно использовать позитивный просмотр назад - или дополнительное соответствие для первой подстроки в шаблоне обрамленное в незапоминающие круглые скобки


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
SKDzR
Отправлено: 13 Августа, 2010 - 13:38:53
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Нояб. 2009  
Откуда: Россия -- Дзержинск


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




спасибо.
проблема решилась preg_match_all и циклом
 
 Top
JustUserR
Отправлено: 13 Августа, 2010 - 23:58:17
Post Id



Активный участник


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


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




SKDzR пишет:
Спасибо. проблема решилась preg_match_all и циклом
Пожалуйста! В том случае если при составлении регулярных выражений на PHP вам удобнее использовать нежадные квантификаторы по умолчанию заместо зажных - то вы можете использовать модификатор /U которые выполняет соответствующую настройку


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 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