Примерно так:
$mod_text = preg_replace('#(.*?)(\[b\]|\[i\]|\[u\]|\[s\])([^\[/\2\]]*?)\z#im' , '$1$3', $text);
Только вот загвоздка: в отрицательном классе получается любой из перечисленных символов, а надо чтобы была их последовательность.. Кто знает, как правильно это сделать?
Спустя 11 минут, 1 секунда (17.10.2010 - 23:31) kirik написал(а):
А зачем их удалять?
И почему бы не заменить закрытые бб-тэги на html-тэги, а потом пройтись второй регуляркой, которая удалит весь оставшийся "мусор".
И почему бы не заменить закрытые бб-тэги на html-тэги, а потом пройтись второй регуляркой, которая удалит весь оставшийся "мусор".
Спустя 3 минуты, 44 секунды (17.10.2010 - 23:35) Invis1ble написал(а):
kirik
Ну не вообще я удалять собрался из БД, а из строки которая на выход идет
Ну не вообще я удалять собрался из БД, а из строки которая на выход идет
Цитата |
И почему бы не заменить закрытые бб-тэги на html-тэги, а потом пройтись второй регуляркой, которая удалит весь оставшийся "мусор". |
вот это я не понял, поясни что ты имеешь ввиду..
Спустя 10 минут, 40 секунд (17.10.2010 - 23:46) kirik написал(а):
"Я вам щас этого дядю покажу!"
* там пробелы убери в [b ] и в [u ]
define('BB_TAGS', 'b|i|u');
$str = '[b ]удаляем[/b] [i]не закрытые или не открытые[/u] bb-[u ]тэги[/u]';
// преобразуем в html
$str = preg_replace('#\[(' . BB_TAGS . ')\](.+?)\[/\\1\]#is', '<$1>$2</$1>', $str);
// убиваем то, что не преобразовалось
$str = preg_replace('#\[/?(' . BB_TAGS . ')\]#is', '', $str);
// и обратно, если надо
$str = preg_replace('#\<(' . BB_TAGS . ')\>(.+?)\</\\1\>#is', '[$1]$2[/$1]', $str);
echo $str;
* там пробелы убери в [b ] и в [u ]
Спустя 4 минуты, 14 секунд (17.10.2010 - 23:50) Invis1ble написал(а):
kirik
Точно! Вроде все верно, щас буду пробовать в действии..
Точно! Вроде все верно, щас буду пробовать в действии..
Спустя 1 час, 44 минуты, 40 секунд (18.10.2010 - 01:34) Invis1ble написал(а):
kirik
К сожалению, не работает твой вариант:
P.S. * поудаляй в коде
К сожалению, не работает твой вариант:
<?php
$text = '[b*][u*]Вот такой вот [i*]текст[/i][/u] со вложенными псевдо-тегами[/b]';
$tags = 'b|i|u|s';
$mod_text = preg_replace('#\[(' . $tags . ')\](.+?)\[/\\1\]#i', '<$1>$2</$1>', $text);
echo $mod_text;
P.S. * поудаляй в коде
Спустя 2 часа, 6 минут, 22 секунды (18.10.2010 - 03:41) kirik написал(а):
Цитата (Invis1ble @ 17.10.2010 - 17:34) |
К сожалению, не работает твой вариант: |
И не должен
Вот для вложенных:
$text = '[b*][u*]Вот такой вот [i*]текст[/i][/u] со вложенными псевдо-тегами[/b]';
function bb_replace($txt) {
$tags = 'b|i|u|s';
return preg_replace('#\[(' . $tags . ')\](.+?)\[/\\1\]#ie', '"<$1>" . bb_replace("$2") . "</$1>"', str_replace("\\'", "'", $txt));
}
echo bb_replace($text);
Спустя 9 часов, 27 минут, 2 секунды (18.10.2010 - 13:08) Invis1ble написал(а):
kirik
теперь вроде бы все нормально, кроме одного случая - с многострочным текстом не работает...
добавляю модификатор m
не помагает
теперь вроде бы все нормально, кроме одного случая - с многострочным текстом не работает...
добавляю модификатор m
preg_replace('#\[(' . $tags . ')\](.+?)\[/\\1\]#ime', '"<$1>" . bb_replace("$2") . "</$1>"', str_replace("\\'", "'", $txt));
не помагает
Спустя 54 минуты, 14 секунд (18.10.2010 - 14:02) Basili4 написал(а):
Invis1ble
на еще s добавить
на еще s добавить
Спустя 21 минута, 26 секунд (18.10.2010 - 14:24) Invis1ble написал(а):
Basili4
спасибо, а не мог ты объяснить почему работает именно с s, а не с m? Вроде наоборот должно..
спасибо, а не мог ты объяснить почему работает именно с s, а не с m? Вроде наоборот должно..
Спустя 1 час, 28 минут, 25 секунд (18.10.2010 - 15:52) Basili4 написал(а):
Invis1ble
Мне, что то Дед Мороз рассказывал. У меня тоже такой же затык был. По моему s разрешает переходить с строки на другую строку. Что то такое.
Мне, что то Дед Мороз рассказывал. У меня тоже такой же затык был. По моему s разрешает переходить с строки на другую строку. Что то такое.
Спустя 2 минуты, 58 секунд (18.10.2010 - 15:55) arvitaly написал(а):
С модификатором s - в точку входит \n - перенос строки
Спустя 4 часа, 3 минуты, 31 секунда (18.10.2010 - 19:58) Invis1ble написал(а):
Basili4
Я вообще кстати заметил, что DedMorozzz знаток регулярок по-ходу
arvitaly
а да, читал об этом, только не думал, что в этом причина.. спасибо
Я вообще кстати заметил, что DedMorozzz знаток регулярок по-ходу
arvitaly
а да, читал об этом, только не думал, что в этом причина.. спасибо
Спустя 46 минут, 40 секунд (18.10.2010 - 20:45) kirik написал(а):
Invis1ble
а m - это multiline, тоесть знаки ^ и $ (знаки начала и конца строки) принимают значение именно знаков начала и конца каждой строки в тексте.
c m:
без m:
Надеюсь понятен..
а m - это multiline, тоесть знаки ^ и $ (знаки начала и конца строки) принимают значение именно знаков начала и конца каждой строки в тексте.
c m:
^первая строка$
^вторая строка$
^...$
без m:
^первая строка
вторая строка
...$
Надеюсь понятен..
Спустя 11 минут, 36 секунд (18.10.2010 - 20:57) Invis1ble написал(а):
kirik
это я знаю, в первом посте в коде я как раз использую \z для нахождения конца строки, т.к. там у меня #m стоит
это я знаю, в первом посте в коде я как раз использую \z для нахождения конца строки, т.к. там у меня #m стоит
_____________
Профессиональная разработка на заказ
Я на GitHub | второй профиль