0 / 0 / 0
Регистрация: 23.06.2011
Сообщений: 19
|
|
1 | |
Получить значения элементов в регулярном выражении07.06.2006, 14:25. Показов 6515. Ответов 39
Метки нет (Все метки)
Уже несколько дней бьюсь над такой вот незамысловатой задачкой:
Имеется строка: <tags></tags><img[пробелы или др. атрибуты]src="dir1/dir2/pic.gif"[пробелы или др. атрибуты]width="500"[пусто,пробелы или др. атрибуты]/><tags></tags> <tags></tags> - любые другие теги. Атрибут width может стоять до атрибута src. Требуется получить значения атрибутов width и src тега img. Уже повсякому крутил preg_match_all а что нужно не получается ( ПоможЫте плз, может кто знает как или делал уже.. Заранее thnks.
0
|
07.06.2006, 14:25 | |
Ответы с готовыми решениями:
39
Ошибка в регулярном выражении Ошибка в регулярном выражении Ошибка в регулярном выражении Парсинг в регулярном выражении |
85 / 61 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
|
|
07.06.2006, 15:11 | 2 |
Забудь про регулярные выражения и пользуйся функцией strstr. Находишь начала тега img, затем его конец (/>) и уже внутри этого дипазона ищешь атрибут width. Получится длиннее, но на порядок эффективнее.
0
|
0 / 0 / 0
Регистрация: 23.06.2011
Сообщений: 19
|
||||||
07.06.2006, 17:16 [ТС] | 3 | |||||
10x. Буду делать без них..
Чтото у меня не красивый кусок получился..
0
|
85 / 61 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
|
|
07.06.2006, 17:34 | 4 |
0
|
5 / 5 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
|
|
07.06.2006, 19:43 | 5 |
Voobsche-to dlya takix veschej ispol'zuyut DOM parser...
0
|
85 / 61 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
|
|
07.06.2006, 20:16 | 6 |
Далеко не всегда. Это называется стрелять из пушки по воробьям. Иной раз проще бывает даже c XML работать как со строкой, а не через DOM модель.
0
|
0 / 0 / 0
Регистрация: 23.06.2011
Сообщений: 19
|
|
08.06.2006, 13:00 [ТС] | 7 |
На самом то деле я парсю xml теги.. img я ввёл для аналогии и простоты восприятия..
Да лучше было бы использовать DOM, но DOM либра похоже на моём хостинге отсутствует потому как его функции, такие например как xmldoc() отсутствуют.. Делал через xml_parser, но там тоже траблы, - номера ключей массивов одних тегов не совпадают с ключами массивов других тегов.. (некоторые под_теги вложенные в теги-родители могут отсутствовать и нумерация пойдет "не верно" - вместо пустого элемента пропустит пока не получит значение этого тега). Потому решил парсить регуляркой, тоже "палок" море.. остановился на strstr.. Незнаю понял ли меня кто-нибудь.. </DIV>
0
|
0 / 0 / 0
Регистрация: 23.06.2011
Сообщений: 19
|
|
08.06.2006, 13:33 [ТС] | 8 |
XML Файл чтоли большой(( Один распарсился с помощью рекурсивной функции с использованием функций strstr substr и strpos.. А второй размером более 80000байт ругается... как быть... (
Allowed memory size of 8388608 bytes exhausted (tried to allocate 88788 bytes) in <B>/script.php</B> on line <B>40</B> </DIV>
0
|
85 / 61 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
|
|
08.06.2006, 14:18 | 9 |
Проверяй свой алгоритм. Возможно у тебя слишком глубокий уровень рекурсии происходит - это ведь тоже память потребляет.
Попробуй уменьшить кол-во строковых операций. К примеру, вот часть твоего кода: $img1=stristr($item," '); $img=substr($img1,0,$img_end); Операцию substr в строке 3 можно и не делать, это занимает лишную память. Работай с диапазоном [$img1 ... $img_end].
0
|
0 / 0 / 0
Регистрация: 23.06.2011
Сообщений: 19
|
|
08.06.2006, 16:15 [ТС] | 10 |
Эмм.. а как я правый предел вычислю без этой строки с strpos?
Вообще странно.. в переменную $xml пишу файл в 8кбайт и её рекурсивно обрезаю при найденном нужном значении и снова вызываю(уже с обрезком).. странно, если сделать substr($xml,80000) то ему хватает памяти если всю строку то задыхается этой надписью о размере памяти </DIV>
0
|
0 / 0 / 0
Регистрация: 23.06.2011
Сообщений: 19
|
|
08.06.2006, 18:30 [ТС] | 11 |
Блин 120кБ теста прорекурсировать не может(( В нечном счёте на strstr ругается ( Может она как-то память своим очередным выховом забивает и не освобождает?..</DIV>
0
|
85 / 61 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
|
|
08.06.2006, 18:35 | 12 |
Не видя кода, я ничего конкретного посоветовать не смогу.
0
|
0 / 0 / 0
Регистрация: 23.06.2011
Сообщений: 19
|
|||||||||||
08.06.2006, 19:01 [ТС] | 13 | ||||||||||
Работает до 80кб строки
0
|
85 / 61 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
|
||||||
08.06.2006, 21:12 | 14 | |||||
Зачем здесь рекурсия можешь обяснить?
Попробуй вариант попроще:
0
|
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 148
|
||||||
09.06.2006, 01:51 | 15 | |||||
Ну позвольте я и свои 5 коп вставлю
мне кажется что
как я понял надо узнать сылку на картинку то это можно сделать так preg_match_all("/[ ](?:src)[ ]*=[ '" ]*([^ "'> ]+)[^>]*>/i", $item, $linc); $linc=$linc[1]; $linc=array_values(array_unique ($linc)); $linc масив с сылками на картинки c width по тому же принцыпу.
0
|
0 / 0 / 0
Регистрация: 23.06.2011
Сообщений: 19
|
|
09.06.2006, 11:23 [ТС] | 16 |
<STRONG>1:</STRONG> <STRONG>...<tagwww>содержимое</tagwww>....<tagwww>содержимое</tagwww>....</STRONG> Вытащить в массив все значения между тегами <tagwww> и </tagwww> <STRONG>2: </STRONG> <STRONG> [tag1, tag2...]...<mytag</STRONG><EM><FONT size=1>[любое мн. символов и пробел]</EM><STRONG>url="dir/pic.gif"</STRONG><FONT size=1><EM>[возможно есть символы]/</EM><FONT size=2><STRONG>>...[tagN,tagM]..</STRONG> Найти <<STRONG>mytag/> </STRONG>и вытянуть у него значение атр. <STRONG>url</STRONG> Вот и бьюсь уже который день... если с регуляркой я с 1й задачей справился.. незнаю оптимально или нет, а для больших объемов это важно.. то со второй вообще ничего не получается ( А прогонять по 200-300кб текста с неоптимальной регуляркой както.... <STRONG></STRONG> <STRONG></STRONG> </DIV></DIV>
0
|
0 / 0 / 0
Регистрация: 23.06.2011
Сообщений: 19
|
|
09.06.2006, 11:28 [ТС] | 17 |
0
|
85 / 61 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
|
|
09.06.2006, 14:15 | 18 |
2 Alladar
Просто для информации тебе. Проверил сегодня свою функцию на файле размером в 900 Кб - проглотила без проблем. 2 pehser Следует понимать, что регулярные выражения имееют как достоинства так и недостатки. Достоинство это возможность просто описать некий шаблон текста, а недостаток что это требует больше ресурсов по сравнению с обычными строковыми функциями. Поэтому не надо воспринимать регулярные выражения как "серебрянную пулю" и применять их с умом, а не пихать куда попало. В данном конкретном случае для поиска атрибута src лучше написать специальную функцию, чем регулярное выражение. Да, эта функция будет длинее, чем вариант с регулярными выражениями, но работать он будет быстрее.
0
|
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 148
|
|
09.06.2006, 15:17 | 19 |
bazile, я регулярки не воспринимаю как ... я кодато сам писал скрипт который должен вы циплять все сылки на страничке или все картинки на страничке и может я тогда не правильно функцию на писал но регулярка выигрывала по скоросте.
Надо будет по баловаться, аж интересно стало.
0
|
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 148
|
|
09.06.2006, 15:23 | 20 |
preg_match_all("/<mytag(?:url)[ ]*=[ '" ]*([^ "'> ]+)[^>]*>/i", $item, $linc);
0
|
09.06.2006, 15:23 | |
09.06.2006, 15:23 | |
Помогаю со студенческими работами здесь
20
Ошибка в регулярном выражении Ошибка в регулярном выражении Спец символы в регулярном выражении Проверка поля с паролем на регулярном выражении Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |