![]() |
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]() ![]() ![]() |
|
Frozen_Coyote |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 20.9.2007 Репутация: нет Всего: нет |
Прошу помощи!
Есть тэг <TD class=xl26 colSpan=5 style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; WIDTH: 272pt; BORDER-BOTTOM: #ece9d8; HEIGHT: 60pt; BACKGROUND-COLOR: transparent" width=363 > нужно чтобы после TD вычищало все, кроме colspan=5. вместо 5 может быть двухзначное число. Вроде как то через исключение [^colspan=\d{1,2}] но четко не получается. помогите плиз. |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 5 Всего: 146 |
Так нельзя писать, т.к. в квадратных скобках перечисляются символы, а не целковые фразы. Для этого используются Утверждения. Но можно и без утверждений обойтись.
|
|||
|
||||
Frozen_Coyote |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 20.9.2007 Репутация: нет Всего: нет |
Спасибо большое, отлично сработало, но если допустим в тэге colspan не присутствует - выражение оставляет его нетронутым. Я может некорректно выразился, но нужно чтобы выражение оставляло colspan если оно есть в тэге, если его нет - вычищало полностью, оставляя только <td>. наверно это надо через какие то хитрый preg_match делать?
|
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 8 Всего: 401 |
Frozen_Coyote, попробуйте вот такую модификацию:
Отличия от варианта sTa1kErа - еще одна пара скобок с "?" и минимизатор жаности первого "*". -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
Frozen_Coyote |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 20.9.2007 Репутация: нет Всего: нет |
Спасибо! Суперски! А можно еще попросить помочь: опять не могу сообразить: мне нужно чтобы выражение при нахождении в строке кроме colspan еще и rowspan оставляло его также, для чего попробовал применить хитрый на мой взгляд способ, заменив в выражении в слове colspan c и l на точки (ну чтобы rowspan тоже цепляло). так вот: цепляет только один из двух находящихся в строке сопадений: если первый colspan - отобразит его (второй rowspan потрет) ну и наоборот. Подскажите, как заставить выражение в случае обнаружения обоих параметро оба и оставлять? $Out = preg_replace("/<td\s+[^>]*?((\s.o.span=(?(?='|\")('|\")\d+\\3|\d+\b))[^>]*)?>/is", "<td$2>", $In); |
||||
|
|||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 5 Всего: 146 |
Frozen_Coyote, написал класс для. Производительность, конечно, немного пострадает, но зато универсальный.
Добавлено @ 08:48 Это для PHP 5. Это сообщение отредактировал(а) sTa1kEr - 7.2.2008, 16:03 |
|||
|
||||
Frozen_Coyote |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 20.9.2007 Репутация: нет Всего: нет |
sTa1kEr, огромное Вам спасибо за помощь. Очень признателен.
|
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 8 Всего: 401 |
sTa1kEr, красиво, впечатляет;). Одиночной регуляркой, насколько я понимаю, вопрос никак не решить (по крайней мере у меня, как я ни пробовал, не получилось)?
Пожалуй, preg_replace_callback действительно тут оптимум... вот только меня немного смущает лямбда-функция в цикле - если я ничего не путаю, в каких-то прежних версиях она создавалась заново при каждой итерации... в актуальных версиях это не так? -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 5 Всего: 146 |
Эм... а где вы там цикл увидели? ![]() PS Нашел ошибку в этой функции. Надо не возращать значение, а присваивать $i
|
|||
|
||||
Frozen_Coyote |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 20.9.2007 Репутация: нет Всего: нет |
Господа, а как вам такой вот вариант я сделал?
![]() ![]() ![]()
Это сообщение отредактировал(а) skyboy - 15.12.2007, 01:03 |
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 8 Всего: 401 |
Frozen_Coyote, весьма неплохо, только sTa1kErовские "навороты" в реге для перехвата значений атрибута вне зависимости от того, заключены ли они в какие-либо кавычки, уместны в ф-ции DoIt, а не в preg_replace_callback. Предлагаю уточненно-упрощенный вариант:
-------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
Frozen_Coyote |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 20.9.2007 Репутация: нет Всего: нет |
SelenIT, реально Ваш вариант лучше
![]() |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Тексты | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |