[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярки
silius
Ребят, выручайте, нужно вырезать все <br> между тэгами <table></table>
спасибо



Спустя 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>"

извеняюсь, что сразу неправильно выразился smile.gif

Спустя 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)
так

$start=strpos('<table>',$a)+strlen('<table>');
$end=strpos('</table>',$a);
$len=$end-$start;
str_replace('<br>','',substr($a,$start,$len));

а можете в словах объяснить то, что Вы написали, а то, что-то не могу врбиться в код

Спустя 11 минут, 30 секунд (25.06.2010 - 11:47) ИНСИ написал(а):
Basili4 офигеть, как ты намудрил.

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 на ''

Спустя 47 секунд (25.06.2010 - 11:50) Basili4 написал(а):
welbox2
дык ему надо убить только то что в <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 надо удалить smile.gif

Спустя 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 написал(а):
Вот вот. Наконец то.))) Растолковал.
Вы чего, ребята. Ну нужно же учиться читать между строк, раз тут полагаются на телепатию. smile.gif

$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
Спасибо тебе!!!!!!! прошу прощения, что сразу не раскрыл задачу smile.gif

Спустя 59 минут, 28 секунд (25.06.2010 - 13:10) olya-kowka написал(а):
twin, скажите, а для чего использовать 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> можно стилизовать, для тебя наверно новость. smile.gif

Хотя я и сам проморгал таблицу. Правда немного не так нужно было, иначе съест все от начала первой таблицы, до конца последней.

$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
В целом согласен... и все же... smile.gif
Цитата
Другими словами лямбда-функция дает большой выигрыш по скорости, но 5.3 стоит далеко не у всех, так что такая оптимизация преждевременна.

create_function с одной стороны позволяет писать понятный (особенно для учебных целей) и красивый код (как в вашем варианте rolleyes.gif ), с другой стороны это самая неудачная со стороны разработчиков PHP реализация описания функции (и проблемы как со скоростью, так и с памятью). В разовой замене все равно что использовать, но в парсере лично я 10 раз подумаю, перед тем как прицепить к коду изначальную задержку.
до 5.3 полностью оправдывает себя вынос кода в отдельную обычную функцию/метод...


Спустя 2 часа, 41 минута, 22 секунды (27.06.2010 - 13:36) twin написал(а):
Ну тут не смею не согласиться. Отдельной функцией оптимальнее.


_____________
Windows - уникальная операционная система: в ней выключение компьютера начинается с нажатия кнопки ПУСК.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.