![]() |
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]() ![]() ![]() |
|
z-END |
|
||||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: нет Всего: 102 |
Здравствуйте!
Имеется входной текст такого вида:
необходимо заменить <hs>...</hs> - на другой блок с помощью preg_replace_callback при этом в функцию нужно передать некоторые значимые данные (вида outline=solid) из аттрибутов основного тега hs (outline, level) безуспешно пытаюсь сотавить регулярку для получения требуемых данных. совершенно немогу понять, как добиться требуемого результата, если учесть что порядок аттрибутов - свободный и вообще аттрибуты не обязательны... вот мой совершенно нерабочий вариант:
-------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
||||
|
|||||
theworldcreator |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Я добился кое каких результатов. А возможны ли атрибуты не из списка?
|
|||
|
||||
theworldcreator |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Вывод:
Во первых поиск не работал из-за того, что производился только по первой строке. Существует модификатор m который якобы позволяет вести поиск по всему тексту, но у меня почему то не заработал. Во вторых решена проблема дополнительных атрибутов(для теста ввел атрибут height = 5px) что означает "?:" я не знаю, поэтому убрал ![]() Основная проблема - находит только последний атрибут. Ну и пришлось удалить символы перевода строки, как сделать чтобы работало с ними не знаю. |
||||
|
|||||
z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: нет Всего: 102 |
возможны, но они ненужны, все аттрибуты которые нужны мзвестны заранее... у меня нечто подобное тоже получилось, но все аттрибуты он так и выдренул :( -------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
unicross |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 422 Регистрация: 15.6.2008 Репутация: 5 Всего: 53 |
z-END, одной регуляркой не получится. Всегда будет возвращать значение последнего атрибута. Попробуйте так:
Еще как вариант http://forum.vingrad.ru/forum/topic-237171...y1707701/0.html Это сообщение отредактировал(а) unicross - 13.1.2009, 21:07 |
|||
|
||||
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 1 Всего: 50 |
|
|||
|
||||
z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: нет Всего: 102 |
жаль конечно что нельзя :( но всеравно спасибо! -------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
unicross |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 422 Регистрация: 15.6.2008 Репутация: 5 Всего: 53 |
А какая разница одной регуляркой или двумя? Проблема ведь решается... Кстати... По ссылке указанной мной проблема решается одной регуляркой! Единственная проблема - необходимо определиться с количеством атрибутов. Если атрибутов будет больше, то поиск просто не даст результатов. Это сообщение отредактировал(а) unicross - 14.1.2009, 17:25 |
|||
|
||||
theworldcreator |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
to amg: Нет, имел ввиду вообще не это, был введен в заблуждение неофициальной документацией, теперь буду знать, спасибо.
|
|||
|
||||
z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: нет Всего: 102 |
unicross, смотрел, варианты с ограниченным кол-вом тэгов не подходят т.к. неизвестно сколько их всего.
дествительно ![]() -------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
amg |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 1 Всего: 50 |
theworldcreator, поиск у Вас не работал (производился только по первой строке) потому что обычно конструкции .* и .+ (присутствующие в обсуждаемом регулярном выражении) не могут вылезти за пределы 1-й подстроки многострочной строки, т.к. . (точка) не подходит символу конца строки "\n" (а именно этим символом заканчивается каждая подстрока в многострочной строке). Чтобы эту ситуацию преодолеть, в PCRE есть модификатор s, заставляющий . (точку) подходить и символу конца строки "\n" тоже. Проще говоря, обычно модификатор s используют, если строка многострочная и в регулярном выражении есть конструкции .* или .+ ЗЫ Прошу прощения за занудство. |
||||
|
|||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Тексты | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |