Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/35: Рейтинг темы: голосов - 35, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 23.06.2011
Сообщений: 19

Получить значения элементов в регулярном выражении

07.06.2006, 14:25. Показов 6966. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.06.2006, 14:25
Ответы с готовыми решениями:

Ошибка в регулярном выражении
Здравствуйте, возникла проблема с регулярным выражением. regexp = &quot;|&lt;span&gt;\s+&lt;b&gt;24 октября...

Ошибка в регулярном выражении
Есть текст $text = '1#{\b 37\par К88\par \b0 \b Акулова, З. М. \b0 \par \tab Куда пойти учиться? : Информ. - реклам. справ / З. М....

Ошибка в регулярном выражении
Составляю регулярное выражение для перевода url из текста, в активную ссылку. $text =...

39
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 148
09.06.2006, 15:26
Студворк — интернет-сервис помощи студентам
Блин форум теги хавает

Code
1
2
3
4
preg_match_all("/<mytag(?:url)[ 
    ]*=[ '"
    ]*([^ "'>
    ]+)[^>]*>/i", $item, $linc);
0
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 148
09.06.2006, 15:32
Блин форум теги хавает

bazile, подкажи как экронизировать код чтобы форум не проглатывал теги?
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
09.06.2006, 15:40
pehser (09.06.2006)
Блин форум теги хавает



bazile, подкажи как экронизировать код чтобы форум не проглатывал теги?


Не знаю. После переноса сайта на новый хостинг начались проблемы. Админ сейчас ими занимается.
0
0 / 0 / 0
Регистрация: 23.06.2011
Сообщений: 19
09.06.2006, 17:21  [ТС]
Bazile, Thnks юзаю её, вполне успешно справляется
0
0 / 0 / 0
Регистрация: 23.06.2011
Сообщений: 19
09.06.2006, 17:39  [ТС]
<STRONG>pehser</STRONG>, сенкс поэксперементирую.

а я думаю что за регулярка странная без условий поиска, оказывается форум шалит</DIV>
0
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 148
09.06.2006, 19:31
Alladar (09.06.2006)
<STRONG>pehser</STRONG>, сенкс поэксперементирую.

а я думаю что за регулярка странная без условий поиска, оказывается форум шалит</DIV>
кода по пробуеш скажеш результат по скоросте, а то после поста беза аж интересно стало
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
10.06.2006, 00:56
Basile,



A otkuda vi znaete, chto u vas strokovie funkcii rabotayut bistree RegExp ili dazhe DOM? Vi sravnivali vashu funkcyu s nimi? Esli da, to naskol'ko ona bistree etix bibliotek? Ya imeyu vvidu run-time. Menya ne bespokoit razmer skompilirovannogo fajla i compilyacionnoe vremya. Za poslednie 10 let v moej praktike eto ne bilo problemoj.



Spasibo



VladConn

0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
10.06.2006, 02:02
Basile,

Eto primer iz VB.NET. Obratite vnimanie na yasnost' i prostotu koda pri ispol'zovanii DOM. Skorost' fantastichna. Ya proboval na 1000 linij, prakticheski mgnovenno. I nikakoj vozni so strokovimi funkciyami.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
        Dim xmlDoc As New XmlDocument
        Dim xmlMyNode As XmlNode
        Dim xmlMyNodes As XmlNodeList
        Dim MyHashTable As New Hashtable
 
        xmlDoc.Load("C: empTest.xml")
        xmlMyNodes = xmlDoc.SelectNodes("//TEST/DATA")
 
        For Each xmlMyNode In xmlMyNodes
            MyHashTable.Add(xmlMyNode.InnerXml, xmlMyNode.Attributes("WDH").InnerText & "#" & xmlMyNode.Attributes("SRC").InnerText)
        Next xmlMyNode
VladConn
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
13.06.2006, 15:58
2 VladConn

И регулярные выражения и DOM модель для работы требуют выполнения дополнительных действий "за кулисами". Регулярные выражения требуется сначала откомпилировать и подготовить движок к работе. Для работы DOM сначала надо создать полное представление документа в памяти, что требует времени и ресурсов. Разве это не очевидно?

Вот к примеру, что написано в справке по функции split: "If you don't require the power of regular expressions, it is faster to use explode(), which doesn't incur the overhead of the regular expression engine." (выделение мое).

Что касается конкретных результатов, то я попробовал сравнить скорость работы со строками и регулярными выражениями в PHP. Поставил задачу - выбрать все значения атрибута id из входного xml файла. Размер файла 931 Кб. Пробовались следующие варианты:

1) strpos/substr
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$res = array();
$tag1 = 'id="'
$tag2 = '"'
$tag1_len = strlen($tag1);
$tag2_len = strlen($tag2);
 
for($last = 0;;)
{
    $pos1 = strpos($source, $tag1, $last);
    if (FALSE === $pos1) break;
 
    $last = $pos1 + $tag1_len;
    $pos2 = strpos($source, $tag2, $last);
    if (FALSE !== $pos2)
    {
        $res[] = substr($source, $last, $pos2-$last);
        $last = $pos2 + $tag2_len;
    }
}
2) explode/substr/strpos
PHP
1
2
3
4
5
6
$res = array();
$tmp = explode('id="', $source);
for ($i=1; $i<count($tmp); $i++)
{
    $res[] = substr($tmp[$i], 0, strpos($tmp[$i], '"'));
}
3) preg_match_all
PHP
1
preg_match_all('/id="(.+?)"/', $source, $res);
Каждый вариант отрабатывался 10 раз и замерялось время его исполнения. Так делалось 10 раз, после чего рассчитывалось среднее время работы.

Результаты:

1) strpos/substr - 1.87 секунд. Увы, оказалось что он самый медленный.

2) explode/substr/strpos - 0.23 секунды. Самый быстрый.

3) preg_match_all - 0.4 секунды. Гораздо быстрее варианта 1), но медленнее варианта 2), что и требовалось доказать.

Далее я решил сравнить скорость работы со строками и через DOM в .NET 2.0. Забегая вперед скажу, что DOM работает медленнее чем строки, но не настолько чтобы это стало серьезной проблемой. Возможно стоит также сравнивать требования по памяти во время исполнения.

В аттачментах два файла с методами сравнения.

Результаты: Прамая работа со строками работает в среднем 0.08 секунды, DOM - 0.15 секунд. То есть примерно в два раза медленнее.

Вопросы?
0
13.06.2006, 17:52
есть такая регулярка вытаскавает из из штмл все линки

preg_match_all("/[ ](?:src|background|href|url)[
]*=[ '"
]*([^ "'>
]+)[^>]*>/i", $buf, $linc);

может подскажеш вариант кторый будет более быстро выполнять данную задачку?
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 148
13.06.2006, 19:09
ну вариант 2 это не плохо кода регистр все время один ное если разный то работать он уже не будет..
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
13.06.2006, 19:12
гость (13.06.2006)
есть такая регулярка вытаскавает из из штмл все линки

preg_match_all("/[ ](?:src|background|href|url)[
]*=[ '"
]*([^ "'>
]+)[^>]*>/i", $buf, $linc);

может подскажеш вариант кторый будет более быстро выполнять данную задачку?
Такую простую задачу решай, пожалуйста, самостоятельно.
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
13.06.2006, 19:14
pehser (13.06.2006)
ну вариант 2 это не плохо кода регистр все время один ное если разный то работать он уже не будет..
Безусловно, но ведь в XML все теги всегда в одном и том же регистре.
0
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 148
13.06.2006, 19:28
всяких мастеров хватает есть котрые могут написать и большими или с большой, а как извесно что правельный алгоритм должен быть универсальный. По этому я остаюсь пока при мнении что для решения подобных задачь регуляка подходит лучьше.

Да и еше ты говориш гостю что задачька простая? Я например не вижу как решить его вариает более быстрым вариантом, так что если так просто может продеманстрируеш?
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
13.06.2006, 19:37
Privet, basile.



Spasibo za takoe osnovatel'noe izuchenie voprosa. Ya na samom dele i ne rasschityval na takoe. No eto lishnij raz podcherkivaet (na moj skromnij vzglyad) neobxodimost' ispol'zovaniya DOM pri rabote s XML. Raznica v skorosti 2 raza v vashem primere, konechno ochutima - esli sidet' s morskim xronometrom, ved' bez nego ona i ne pochuvstvuetsya. No yasnost' i kratkos' koda s DOM - nesravnenna. A poslednee - kak pravilo, i est' samoe glavnoe, po krajnej mere, soglasno moemu opitu. Glavnoe - bistro ponyat' kod dlya ego potencial'noj podderzhki, bistro ego sdelat' i minimizorovat' chislo vozmozhnix oshibok, t.k. chem prosche kod, tem men'she bagov.



Esche raz spasibo. Lishnij raz ubedili menya v ispol'zovanii standartnix specializirovannix klassov. Tem bolee, gde garantiya, chto budet bistree so strokovimi funkciyami? Poroj ved' i net, kak v punkte 1.



VladConn



0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
13.06.2006, 19:42
pehser (13.06.2006)
всяких мастеров хватает есть котрые могут написать и большими или с большой, а как извесно что правельный алгоритм должен быть универсальный. По этому я остаюсь пока при мнении что для решения подобных задачь регуляка подходит лучьше.
Мастера здесь ни при чем. В html теги можно писать как угодно, хоть в смешанном регистре <hTml>, но в XML нет. Кроме того никакого разговора о универсальности подходов у нас не было. Просто сравнивали разные подходы. Что использовать в каждом конкретном случае решать программисту.



pehser (13.06.2006)
Да и еше ты говориш гостю что задачька простая? Я например не вижу как решить его вариает более быстрым вариантом, так что если так просто может продеманстрируеш?
В данном случае, регулярное выражение будет лучше и я нигде не говорил, что в данном случае их не надо применять . Просто не обязан всем подряд помогать, вот и все. Что ему (гостю) мешает попробовать разные регулярные выражения или написать алгоритм с использованием строковых функций? По моему, разве что лень.
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
13.06.2006, 19:53
2 VladConn

Моей единственной целью было показать, что есть ситуации, когда более простые, но длинные методы обгоняют по скорости, более сложные, правда теряя по пути читабельность. Я не хотел сказать, что надо забыть, про регулярные выражения и DOM и работать как в "старые добрые времена". Совсем нет! Я полностью, согласен, что ясность кода очень важная вещь, особенно, при коллективной работе над проектом. Не зря есть точка зрения, что от программиста пишущего непонятный для его коллег код, лучше избавляться.



В случае с DOM я, честно говоря, рассчитывал на большую разницу в скорости работы - не два раза, а один или несколько порядков. Можно только сказать спасибо программистам Microsoft написавшим такой эффективный код. В .NET 2.0 они, среди всего прочего, работу с XML сильно оптимизировали.
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
13.06.2006, 23:03
Privet, Basile,



Chto DOM, chto strokovie funkcii - vse oni legche, chem saprogrammirovat' garazhnie dveri u sebya DOMa: vchera ves vecher ubil, lazaya po garazhnomu potolku pod zvuk prigauischix dverej.

:0)



VladConn

0
0 / 0 / 0
Регистрация: 23.06.2011
Сообщений: 19
14.06.2006, 11:15  [ТС]
В моём случае недостатком DOM было то что на имеющемся хостинге с 4пхп он не слинкован..
0
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
14.06.2006, 13:29
VladConn (13.06.2006)
Chto DOM, chto strokovie funkcii - vse oni legche, chem saprogrammirovat' garazhnie dveri u sebya DOMa: vchera ves vecher ubil, lazaya po garazhnomu potolku pod zvuk prigauischix dverej.
))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.06.2006, 13:29
Помогаю со студенческими работами здесь

Парсинг в регулярном выражении
Добрый день. Нужна помощь в регулярном выражении. Как получить содержимое тегов h1, h2 и т.д.? Пробую так: ...

Ошибка в регулярном выражении
Приветствую!! Помогите найти ошибку: preg_match_all(&quot;/&lt;a(*=\&quot;?*\&quot;?)*(href=\&quot;*\&quot;)(*=\&quot;?*\&quot;?)&gt;/iU&quot;,$res,$urls); выдает...

Ошибка в регулярном выражении
Доброго времени суток. В чем может быть ошибка: Warning: preg_match_all(): Compilation failed: range out of order in character...

Спец символы в регулярном выражении
Парни подскажите такую вещь . Вот есть вражение 'arts/(+)/(+)' =&gt;'arts/view/$1/$2' , вторая маска отдает число , которое используется как...

Проверка поля с паролем на регулярном выражении
Добрый вечер! У меня такая проблема при регистрации у меня пропускает скрипт поля с заглавными буквами и заносит значении в бд. А при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так? Да, всё верно. Я — искусственный интеллект. Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает. В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше. Перед запуском проверяем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru