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

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

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

 

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

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

тема: ограничение матчей разделителем
 
 автор: forkir   (21.09.2012 в 18:49)   письмо автору
 
 

Добрый день
исходный текст

id:1 id2:11
id:2 id2:22
id:3 id2:33
lalala
id:4 id2:44
id:5 id2:55
id:6 id2:66


регекс
id:(\d*) id2:(\d*)

этот регекс находит 6 матчей. в каждом матче по 2 группы со значениями
надо сделать так, чтобы было всего 3 матча (3 первых, до lalala)

Всю голову себе уже сломал. Помогите пожалуйста.

ЗЫ очень хотелось обозвать тему "помогите!!!" =)

Спасибо!

  Ответить  
 
 автор: Sfinks   (21.09.2012 в 20:38)   письмо автору
 
   для: forkir   (21.09.2012 в 18:49)
 

А за 2 раза не прокатит?
1ый - все что до лалала: /^(.*?)lalala/
2ой уже в нем то что надо: /id:(\d*) id2:(\d*)/

  Ответить  
 
 автор: forkir   (22.09.2012 в 12:36)   письмо автору
 
   для: Sfinks   (21.09.2012 в 20:38)
 

не прокатит =(

  Ответить  
 
 автор: Deed   (22.09.2012 в 20:12)   письмо автору
 
   для: forkir   (22.09.2012 в 12:36)
 

Так трудно что-либо решить. Дайте оригинал, откуда нужно парсить.
В группах по три элемента всегда?

  Ответить  
 
 автор: Sfinks   (22.09.2012 в 21:32)   письмо автору
 
   для: forkir   (22.09.2012 в 12:36)
 

От того что вам не хочется, логика работы РВ не изменится.
А логика такова, что никаких рекурсивных просмотров текста не может быть!
А чтобы узнать что до определенной точки нет надписи lalala, нужно просмотреть сперва этот текст.
И, хотя есть такая вещь, как положительный/отрицательный просмотр вперед/назад от определенной точки без включения этого фрагмента в шаблон, но он ограничен фиксированной длинной искомого фрагмента.
В общем либо как я вам в первом посте сказал, либо только первое вхождение, либо только последнее перед lalala и т.п.
Вычленить все сразу одним просмотром никак не получится!
Ну если их только не всегда фиксированное число, как сказал Deed, например 3.

  Ответить  
 
 автор: forkir   (23.09.2012 в 14:13)   письмо автору
 
   для: Sfinks   (22.09.2012 в 21:32)
 

Понял. Спасибо. Придется расширять функционал програмулины... =) Думаю можно закрывать.

  Ответить  
 
 автор: .....   (24.09.2012 в 15:15)
 
   для: Sfinks   (22.09.2012 в 21:32)
 

можно и по другому с помощью \g
<xmp><?php

$txt 
'id:1 id2:11
id:2 id2:22 
id:3 id2:33 
lalala 
id:4 id2:44 
id:5 id2:55 
id:6 id2:66
'
;

preg_match_all('#\G^\s*id:(\d*)\s+id2:(\d*).*$[\r\n]+#m'$txt$o);
print_r($o);
но не всегда оправдано

  Ответить  
 
 автор: Sfinks   (25.09.2012 в 19:00)   письмо автору
 
   для: .....   (24.09.2012 в 15:15)
 

Не знал! Спасибо.
А почему не оправдано?

  Ответить  
 
 автор: forkir   (28.09.2012 в 14:51)   письмо автору
 
   для: .....   (24.09.2012 в 15:15)
 

Спасибо. \g - находка))

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

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