| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Тексты > получение определенных данных из тэгов |
| Автор: z-END 13.1.2009, 16:23 | ||||
| Здравствуйте! Имеется входной текст такого вида:
необходимо заменить <hs>...</hs> - на другой блок с помощью preg_replace_callback при этом в функцию нужно передать некоторые значимые данные (вида outline=solid) из аттрибутов основного тега hs (outline, level) безуспешно пытаюсь сотавить регулярку для получения требуемых данных. совершенно немогу понять, как добиться требуемого результата, если учесть что порядок аттрибутов - свободный и вообще аттрибуты не обязательны... вот мой совершенно нерабочий вариант:
|
| Автор: theworldcreator 13.1.2009, 16:57 |
| Я добился кое каких результатов. А возможны ли атрибуты не из списка? |
| Автор: theworldcreator 13.1.2009, 17:21 | ||||
Вывод:
Во первых поиск не работал из-за того, что производился только по первой строке. Существует модификатор m который якобы позволяет вести поиск по всему тексту, но у меня почему то не заработал. Во вторых решена проблема дополнительных атрибутов(для теста ввел атрибут height = 5px) что означает "?:" я не знаю, поэтому убрал Основная проблема - находит только последний атрибут. Ну и пришлось удалить символы перевода строки, как сделать чтобы работало с ними не знаю. |
| Автор: z-END 13.1.2009, 17:46 |
возможны, но они ненужны, все аттрибуты которые нужны мзвестны заранее... у меня нечто подобное тоже получилось, но все аттрибуты он так и выдренул :( |
| Автор: unicross 13.1.2009, 17:49 | ||
z-END, одной регуляркой не получится. Всегда будет возвращать значение последнего атрибута. Попробуйте так:
Еще как вариант http://forum.vingrad.ru/forum/topic-237171/anchor-entry1707701/0.html |
| Автор: z-END 14.1.2009, 17:05 |
жаль конечно что нельзя :( но всеравно спасибо! |
| Автор: unicross 14.1.2009, 17:22 |
А какая разница одной регуляркой или двумя? Проблема ведь решается... Кстати... По ссылке указанной мной проблема решается одной регуляркой! Единственная проблема - необходимо определиться с количеством атрибутов. Если атрибутов будет больше, то поиск просто не даст результатов. |
| Автор: theworldcreator 14.1.2009, 20:36 |
| to amg: Нет, имел ввиду вообще не это, был введен в заблуждение неофициальной документацией, теперь буду знать, спасибо. |
| Автор: z-END 15.1.2009, 02:33 | ||
unicross, смотрел, варианты с ограниченным кол-вом тэгов не подходят т.к. неизвестно сколько их всего.
дествительно |
| Автор: amg 15.1.2009, 09:24 | ||||||
theworldcreator, поиск у Вас не работал (производился только по первой строке) потому что обычно конструкции .* и .+ (присутствующие в обсуждаемом регулярном выражении) не могут вылезти за пределы 1-й подстроки многострочной строки, т.к. . (точка) не подходит символу конца строки "\n" (а именно этим символом заканчивается каждая подстрока в многострочной строке). Чтобы эту ситуацию преодолеть, в PCRE есть модификатор s, заставляющий . (точку) подходить и символу конца строки "\n" тоже. Проще говоря, обычно модификатор s используют, если строка многострочная и в регулярном выражении есть конструкции .* или .+ ЗЫ Прошу прощения за занудство. |