[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: РНР: как вырезать кусок из переменной?
zawm
Здравствуйте.

Нужно обработать переменную вырезав с нее кусок от символа ">" до символа ":" остальное оставить. Т.е. скрипту передается переменная, к примеру такая ">ТЕКСТ КОТОРЫЙ УБРАТЬ: Нужный текст". Как с помощью рнр удалить ">ТЕКСТ КОТОРЫЙ УБРАТЬ:" (включая символы > и :) и оставить только "Нужный текст"?

Через функцию split порезать и убрать начало до символа ":" не всегда правильно ввиду того что в переменной может и не присутствовать ":" либо присутствовать без символа ">" Надо что-то другое... Чтоб именно определяло что существует текст между ">" и ":" и удаляло этот текст вместе с символами.

Заранее спасибо.






Спустя 11 минут, 11 секунд (26.03.2010 - 18:40) ZigZag написал(а):
$text = '>ТЕКСТ КОТОРЫЙ УБРАТЬ: Нужный текст';
echo preg_replace('/>.+:/', ' ', $text);

Спустя 6 минут, 42 секунды (26.03.2010 - 18:47) zawm написал(а):
это же наоборот оставляет текст который нужно убрать....

Спустя 11 минут, 11 секунд (26.03.2010 - 18:58) zawm написал(а):
>Иванов И.И:Как дела?

Вот к примеру отсюда вырезать надо ">Иванов И.И:" и оставить только "Как дела?"

Спустя 1 минута, 35 секунд (26.03.2010 - 18:59) ZigZag написал(а):
чем тебя мой вариант не устроил? проверил еще раз, он делает в точности то что тебе надо

Спустя 2 минуты, 6 секунд (26.03.2010 - 19:01) zawm написал(а):
Вопрос закрыт спасибо. Я сам затупил. Извините все понял.

Спустя 33 секунды (26.03.2010 - 19:02) Winston написал(а):
А так ?
preg_replace ("/>?.*:/i", "", $str);

Спустя 6 часов, 43 минуты, 39 секунд (27.03.2010 - 01:46) sergeiss написал(а):
Хочу обратить внимание на то, что для всех функций работы с регулярками в хэлпе четко написано: если задачу можно решить без регулярок, то лучше обойтись без них. Потому что они ресурсов потребляют много.

В данном случае, мне так что-то кажется, проще было бы использовать функции strpos (2 раза) и substr.

Спустя 6 часов, 29 секунд (27.03.2010 - 07:46) olgatcpip написал(а):
я обычно циклом...... заодно и отсеиваю пустоты..
"> :" вот такие и как-то более подробно получается отследить....
я так полагаю у вас примерно так:
$str='
>ТЕКСТ КОТОРЫЙ УБРАТЬ: Нужный текст
>ТЕКСТ КОТОРЫЙ УБРАТЬ: Нужный текст
>ТЕКСТ КОТОРЫЙ УБРАТЬ: Нужный текст';
smile.gif и я бы (прошу раскритиковать) сделала бы как-то так
$strings=explode('>',$str);
foreach($strings as $string){
if(!trim($string)) continue;
list($x,$s)=explode(':',$string);
if(!trim($s)) continue;
echo '---'.$s;
}

Спустя 2 минуты, 20 секунд (27.03.2010 - 07:48) ZigZag написал(а):
Цитата
Хочу обратить внимание на то, что для всех функций работы с регулярками в хэлпе четко написано: если задачу можно решить без регулярок, то лучше обойтись без них. Потому что они ресурсов потребляют много.

В данном случае, мне так что-то кажется, проще было бы использовать функции strpos (2 раза) и substr.

Получиться такой код:
$str = '>Иванов И.И:Как дела?';

$pos_one = strpos($str, '>');
$pos_two = strpos($str, ':', $pos_one);

if ($pos_one !== false && $pos_two !== false && ($pos_two - $pos_one) != 1) $str = str_replace(substr($str, $pos_one, $pos_two +1), '', $str);

echo $str;

Намного больше буковок да и проверку на тип надо производить, мне наоборот кажеться тут релулярки норм.

Данный случай можно немного модифицировав использовать если в строке надо делать несколько замен:
$str = '>Иванов И.И:Как дела?
>Терминатор В.П.:Тебе конец'
;

while (($pos_one = strpos($str, '>')) !== false)
{
$pos_two = strpos($str, ':', $pos_one);

if ($pos_two !== false && ($pos_two - $pos_one) != 1) $str = str_replace(substr($str, $pos_one, $pos_two +1), '', $str);

echo $str;
}

Спустя 2 часа, 37 минут, 57 секунд (27.03.2010 - 10:26) sergeiss написал(а):
Цитата (ZigZag @ 27.03.2010 - 08:48)
Намного больше буковок да и проверку на тип надо производить, мне наоборот кажется тут регулярки норм.

Я говорил не про количество кода, а про то, сколько времени он будет выполняться. В хэлпе об этом речь идет.
И кстати, зачем использовать str_replace??? Я чегой-то не понял глубокий смысл этой замены. Вырезал часть строки функцией substr - и всё.

Спустя 31 минута, 24 секунды (27.03.2010 - 10:58) ZigZag написал(а):
Цитата
Я говорил не про количество кода, а про то, сколько времени он будет выполняться. В хэлпе об этом речь идет.
И кстати, зачем использовать str_replace??? Я чегой-то не понял глубокий смысл этой замены. Вырезал часть строки функцией substr - и всё.

Найти компромис между читаемостью и краткостью кода против скорости выполнения тоже не мало важно, если проект небольшой и нагрузка будет незначительной, предпочтительно писать так, чтобы было проще ориентироваться в коде. Так что думаю решать каким способом реализовывать решать тому кто будет пользоваться.

Замена для того чтобы работало когда строка будет, например, такой:
$str = 'Каккой то текст идет, >Иванов И.И:Как дела?
>Терминатор В.П.:Тебе конец';
Когда неизвестно в каком месте строчки будет удаляемая часть
Быстрый ответ:

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