eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
обновлён 2 декабря!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+4 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Оффтоп —› Несколько шаблонов в одном preg_match_all
Посл.ответ Сообщение


Ранг: 450.3 (мудрец)
Статус: Участник

Создано: 5 ноября 2011 02:30 · Поправил: ToBad New!
Цитата · Личное сообщение · #1

Не силён в регулярках, помогите объединить в один шаблон:
Делаю так:
Code:
  1. preg_match_all('|name="(.*)"|Uis', $text, $name);
  2. preg_match_all('|modificationDate="(.*)"|Uis', $text, $dat);

Вырезаю имя и дату модификации, нужно только это. Обрабатываю этот текст:
Code:
  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <result>
  3. <publicFiles familyFriendly="true" includeLinks="false">
  4. <items t="images">
  5. <item contentType="image/jpeg" hasThumbnail="true" modificationDate="1320330440" name="3x12_maket(КВ-0127Б1,Б2).jpg" size="51932" url="...3x12_maket(КВ-0127Б1,Б2).jpg/">3x12_maket(КВ-0127Б1,Б2).jpg</item>
  6. <item contentType="image/jpeg" hasThumbnail="true" modificationDate="1320328499" name="3x6_bajana(КВ-0106Б).jpg" size="60333" url="...3x6_bajana(КВ-0106Б).jpg/">3x6_bajana(КВ-0106Б).jpg</item>
  7. <item contentType="image/jpeg" hasThumbnail="true" modificationDate="1320328251" name="3x6_bajana(КВ 0127Б1, Б2).jpg" size="60640" url="...3x6_bajana(КВ%200127Б1,%20Б2).jpg/">3x6_bajana(КВ 0127Б1, Б2).jpg</item>
  8. <item contentType="image/jpeg" hasThumbnail="true" modificationDate="1320329521" name="3x6_balzaka(5084).jpg" size="61330" url="...3x6_balzaka(5084).jpg/">3x6_balzaka(5084).jpg</item>
  9. <item contentType="image/jpeg" hasThumbnail="true" modificationDate="1320329352" name="3x6_balzaka(K130b).jpg" size="60935" url="...3x6_balzaka(K130b).jpg/">3x6_balzaka(K130b).jpg</item>
  10. <item contentType="image/jpeg" hasThumbnail="true" modificationDate="1320329196" name="3x6_balzaka(ki5511-1).jpg" size="61472" url="...3x6_balzaka(ki5511-1).jpg/">3x6_balzaka(ki5511-1).jpg</item>
  11. <item contentType="image/jpeg" hasThumbnail="true" modificationDate="1320329003" name="3x6_okipnoi(k60b).jpg" size="60382" url="...3x6_okipnoi(k60b).jpg/">3x6_okipnoi(k60b).jpg</item>
  12. <item contentType="image/jpeg" hasThumbnail="true" modificationDate="1320329869" name="3x6_perova.jpg" size="60666" url="...3x6_perova.jpg/">3x6_perova.jpg</item>
  13. <item contentType="image/jpeg" hasThumbnail="true" modificationDate="1320329749" name="3x6_vasilk.jpg" size="60635" url="...3x6_vasilk.jpg/">3x6_vasilk.jpg</item>
  14. <item contentType="image/jpeg" hasThumbnail="true" modificationDate="1320330056" name="3x6_vishgor(29089).jpg" size="61208" url="...3x6_vishgor(29089).jpg/">3x6_vishgor(29089).jpg</item>
  15. </items>
  16. </publicFiles>
  17. </result>


p.s. В итоге нужен массив, который сортирую к ключу modificationDate. Есть два рабочих куска гавнокода, второй чуть быстрее первого, но тоже не красивый. Можно тут что-то оптимизировать?

Code:
  1. preg_match_all('|name="(.*)"|Uis', $text, $name);
  2. preg_match_all('|modificationDate="(.*)"|Uis', $text, $dat);
  3. $array=array_combine($dat[1], $name[1]);
  4. krsort($array);


Code:
  1. preg_match_all('|modificationDate="(.*)" size="|Uis', $text, $name);
  2. foreach ($name[1] as $v) {
  3. $v=explode('" name="',$v);
  4. $array[$v[0]]=$v[1];}
  5. krsort($array);


Ранг: 793.4 (! !)
Статус: Участник
Шаман

Создано: 5 ноября 2011 05:39 New!
Цитата · Личное сообщение · #2

Это же XML, возьми SimplePie


Ранг: 450.3 (мудрец)
Статус: Участник

Создано: 5 ноября 2011 06:15 New!
Цитата · Личное сообщение · #3

PE_Kill пишет:
Это же XML, возьми SimplePie


Я находил класс для работы с XML, но получается громоздко и в разы медленнее.


Ранг: 793.4 (! !)
Статус: Участник
Шаман

Создано: 5 ноября 2011 07:53 New!
Цитата · Личное сообщение · #4

Лучший SimplePie, а если регулярками, то типа того:

preg_match_all('!modificationDate="([0-9]+)"[\s]+name="(.*)"[\s]+size=!Uis', $text, $matches);
if (isset($matches[0]) && isset($matches[1]) && isset($matches[2])) {
for ($i=0; $i< count($matches[0]); $i++) {
echo "Date: ".$matches[1][$i].", Name: ".$matches[2][$i]."<br/>";
}
}

PS. Не проверял, навскидку написал.


Ранг: 450.3 (мудрец)
Статус: Участник

Создано: 5 ноября 2011 15:53 New!
Цитата · Личное сообщение · #5

PE_Kill пишет:
preg_match_all('!modificationDate="([0-9]+)"[\s]+name="(.*)"[\s]+size=!Uis', $text, $matches);


Супер, спасибо! Это и нужно было, работает на 20% быстрее, чем мой второй код с foreach и explode.
Теперь так получается:

Code:
  1. preg_match_all('!modificationDate="([0-9]+)"[\s]+name="(.*)"[\s]+size=!Uis', $text, $matches);
  2. $array=array_combine($matches[1], $matches[2]);
  3. krsort($array);
 eXeL@B —› Оффтоп —› Несколько шаблонов в одном preg_match_all

У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0


Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS