спасибо
Спустя 2 минуты, 13 секунд (25.06.2010 - 11:05) Gradus написал(а):
echo str_replace('<br>','','<table><br><br></table>');
Спустя 2 минуты, 24 секунды (25.06.2010 - 11:07) silius написал(а):
если строка следующего рода "строка<br><br><table><br></table>"
извеняюсь, что сразу неправильно выразился
извеняюсь, что сразу неправильно выразился
Спустя 25 минут, 11 секунд (25.06.2010 - 11:32) Basili4 написал(а):
так
$start=strpos('<table>',$a)+strlen('<table>');
$end=strpos('</table>',$a);
$len=$end-$start;
str_replace('<br>','',substr($a,$start,$len));
Спустя 14 секунд (25.06.2010 - 11:33) Dron19 написал(а):
preg_replace ("/(.*)<table><br><br><\/table>/","\\1<table></table>",$test);
Спустя 2 минуты, 49 секунд (25.06.2010 - 11:35) Dron19 написал(а):
Цитата (Basili4 @ 25.06.2010 - 08:32) |
так
|
а можете в словах объяснить то, что Вы написали, а то, что-то не могу врбиться в код
Спустя 11 минут, 30 секунд (25.06.2010 - 11:47) ИНСИ написал(а):
Basili4 офигеть, как ты намудрил.
silius просто сделай вот так:
silius просто сделай вот так:
$text = str_replace('<br>', '', '<br><br><table><br></table>');
echo $text;
Спустя 2 минуты, 9 секунд (25.06.2010 - 11:49) Basili4 написал(а):
1. Получаем начало под строки где внутри тега <table>
2. получаем конец подстроки внутири тега</table>
3. выбираем подстроку
т.е. из <table>adsasdas</table> получаем adsasdas
4. заменяем все BR на ''
2. получаем конец подстроки внутири тега</table>
3. выбираем подстроку
т.е. из <table>adsasdas</table> получаем adsasdas
4. заменяем все BR на ''
Спустя 47 секунд (25.06.2010 - 11:50) Basili4 написал(а):
welbox2
дык ему надо убить только то что в <table></table>
дык ему надо убить только то что в <table></table>
Спустя 1 минута, 41 секунда (25.06.2010 - 11:51) twin написал(а):
Мнда....
Спустя 2 минуты, 33 секунды (25.06.2010 - 11:54) ИНСИ написал(а):
Цитата |
если строка следующего рода "строка<br><br><table><br></table>" извеняюсь, что сразу неправильно выразился smile.gif |
Basili4 мне кажется ему не только в тегах table надо удалить
Спустя 1 минута, 24 секунды (25.06.2010 - 11:55) Basili4 написал(а):
silius поясни пожалуста этот вопрос между таблами тебе убить br или все в строке ?
Спустя 4 минуты, 35 секунд (25.06.2010 - 12:00) silius написал(а):
Значит, есть текст, я с помощью nl2br на выводе из базы ставлю br, так вот, в самом тексте они мне нужны, а в таблицах я хочу их убрать! Таблица большая, мне просто нужно убрать br в таблице, то есть между <table>*</table>
Спустя 7 минут (25.06.2010 - 12:07) twin написал(а):
Вот вот. Наконец то.))) Растолковал.
Вы чего, ребята. Ну нужно же учиться читать между строк, раз тут полагаются на телепатию.
Вы чего, ребята. Ну нужно же учиться читать между строк, раз тут полагаются на телепатию.
$string = "строка<br><br><table><tr><td><br></tr></td></table>";
$string = preg_replace_callback("#<table>(.*?)</table>#i",
create_function('$math', 'return preg_replace("#<br[^>]*?>#i", "", $math[0]);'),
$string);
echo $string;
Спустя 3 минуты, 10 секунд (25.06.2010 - 12:10) silius написал(а):
Всем спасибо за ответы!
twin
Спасибо тебе!!!!!!! прошу прощения, что сразу не раскрыл задачу
twin
Спасибо тебе!!!!!!! прошу прощения, что сразу не раскрыл задачу
Спустя 59 минут, 28 секунд (25.06.2010 - 13:10) olya-kowka написал(а):
twin, скажите, а для чего использовать callback функцию в данном случае? Почему нельзя сделать в одном регулярном выражении замену?
Я вот не использовала никогда callback функции в регулярках, интересно узнать, может в Вашей конструкции есть какое-то преимущество? =)
Я вот не использовала никогда callback функции в регулярках, интересно узнать, может в Вашей конструкции есть какое-то преимущество? =)
Спустя 6 минут, 34 секунды (25.06.2010 - 13:16) twin написал(а):
Ну я вообще то опережая события. Если таблица не одна, а несколько, то одним проходом... я даже не представляю как.
Если есть вариант оптимальнее, с удовольствием возьму на вооружение.
Если есть вариант оптимальнее, с удовольствием возьму на вооружение.
Спустя 3 минуты, 59 секунд (25.06.2010 - 13:20) olya-kowka написал(а):
twin, да не, я не со своим вариантом, просто увидела Вашу конструкцию, сама часто пользуюсь регулярками (не смотря на тяжеловесность, они мне нравятся) и хотела узнать про нее ...
Спустя 35 минут, 12 секунд (25.06.2010 - 13:55) ИНСИ написал(а):
twin как всегда "рулишь" в хорошем смысле
Спустя 1 день, 10 часов, 48 минут, 53 секунды (27.06.2010 - 00:44) gzim9x написал(а):
twin
Цитата |
Если есть вариант оптимальнее, с удовольствием возьму на вооружение. |
все-же можно и такой правильный код оптимизировать... -- заменить вторую регулярку на str_replace и отказаться от "create_function" в пользу лямбды (появилась в 5.3)
$string=preg_replace_callback("/<table[^>]*>(.*)<\/table>/i",
function($match) {
return str_replace(array('<br>','<br/>', '<br />'),'',$match[0]);
},
$string);
на моей машине на 10000 повторений этот вариант выигрывает в 3 раза:
time v.1: 1.631639957428 sec.
time v.2: 0.565489053726 sec.
Спустя 8 часов, 55 минут, 34 секунды (27.06.2010 - 09:40) twin написал(а):
Ну в принципе да. Только два момента. Первый ты сам отметил -
Цитата |
(появилась в 5.3) |
Попробуй замерить лямбду с preg_replace() и увидишь, что разница не столь и существенна.
Другими словами лямбда-функция дает большой выигрыш по скорости, но 5.3 стоит далеко не у всех, так что такая оптимизация преждевременна.
А второй - что касается str_replace(), то если делать универсальный код, то тут лучше не экономить. Выигрыша практически нет (минимальный), а вот то, что тег <br> можно стилизовать, для тебя наверно новость.
Хотя я и сам проморгал таблицу. Правда немного не так нужно было, иначе съест все от начала первой таблицы, до конца последней.
Другими словами лямбда-функция дает большой выигрыш по скорости, но 5.3 стоит далеко не у всех, так что такая оптимизация преждевременна.
А второй - что касается str_replace(), то если делать универсальный код, то тут лучше не экономить. Выигрыша практически нет (минимальный), а вот то, что тег <br> можно стилизовать, для тебя наверно новость.
Хотя я и сам проморгал таблицу. Правда немного не так нужно было, иначе съест все от начала первой таблицы, до конца последней.
$string = preg_replace_callback("#<table[^>]*?>(.*?)</table>#i",
create_function('$match',
'return preg_replace("#<br[^>]*?>#i","",$match[0]);'
),
$string);
Спустя 1 час, 15 минут, 8 секунд (27.06.2010 - 10:55) gzim9x написал(а):
twin
В целом согласен... и все же...
В целом согласен... и все же...
Цитата |
Другими словами лямбда-функция дает большой выигрыш по скорости, но 5.3 стоит далеко не у всех, так что такая оптимизация преждевременна. |
create_function с одной стороны позволяет писать понятный (особенно для учебных целей) и красивый код (как в вашем варианте ), с другой стороны это самая неудачная со стороны разработчиков PHP реализация описания функции (и проблемы как со скоростью, так и с памятью). В разовой замене все равно что использовать, но в парсере лично я 10 раз подумаю, перед тем как прицепить к коду изначальную задержку.
до 5.3 полностью оправдывает себя вынос кода в отдельную обычную функцию/метод...
Спустя 2 часа, 41 минута, 22 секунды (27.06.2010 - 13:36) twin написал(а):
Ну тут не смею не согласиться. Отдельной функцией оптимальнее.
_____________
Windows - уникальная операционная система: в ней выключение компьютера начинается с нажатия кнопки ПУСК.