Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Удаление участка кода из строки
 
 автор: pautina   (01.03.2012 в 15:18)   письмо автору
 
 

Здравствуйте какую функцию в php лучше использовать для удаления части строки
пусть у меня есть такая строка
 
$str = ' <P><STRONG><A href=\"/lessons.php\">Уроки Photoshop</A></STRONG> » <STRONG><A href=\"/lessons.php?rub=1\">Рубрика: Эффекты</A></STRONG></P><BR>
<H1 style=\"TEXT-ALIGN: center\">Создаём абстрактное золотое кольцо в Фотошоп</H1>
<P align=left>В этом уроке я покажу вам, как создать абстрактную золотую сферу с эффектом дыма.</P>
<P align=center><IMG height=262 src=\"/lessons/les1689/01.jpg\" width=450></P>
<P>Для урока вам понадобятся <A href=\"http://qbrushes.net/smoke-fire/revnart-smoke-brushes/\">специальные кисти</A>.</P> '

и мне нужно удалить из неё этот участок кода (он в конце строки)

<IMG height=262 src=\"/lessons/les1689/01.jpg\" width=450></P>
<P>Для урока вам понадобятся <A href=\"http://qbrushes.net/smoke-fire/revnart-smoke-brushes/\">специальные кисти</A>.</P>

Что здесь для удаления лучше использовать?

  Ответить  
 
 автор: cheops   (01.03.2012 в 15:38)   письмо автору
 
   для: pautina   (01.03.2012 в 15:18)
 

Лучше всего найти точку вхождения <IMG с конца при помощи функции strrpos(), а затем используя это значение вырезать из строки начало при помощи функции substr().

  Ответить  
 
 автор: pautina   (01.03.2012 в 16:21)   письмо автору
 
   для: cheops   (01.03.2012 в 15:38)
 

А как быть если нужно удалить определённый участок в центре кода строки
пусть исходная строка

$str = ' <P><STRONG><A href=\"/lessons.php\">Уроки Photoshop</A></STRONG> » <STRONG><A href=\"/lessons.php?rub=1\">Рубрика: Эффекты</A></STRONG></P><BR> 
<H1 style=\"TEXT-ALIGN: center\">Создаём абстрактное золотое кольцо в Фотошоп</H1> 
<P align=left>В этом уроке я покажу вам, как создать абстрактную золотую сферу с эффектом дыма.</P> 
<P align=center><IMG height=262 src=\"/lessons/les1689/01.jpg\" width=450></P> 
<P>Для урока вам понадобятся <A href=\"http://qbrushes.net/smoke-fire/revnart-smoke-brushes/\">специальные кисти</A>.</P> '

пусть

     $findme_one='<A href=\"/lessons.php?rub=1\">Рубрика: Эффекты</A>'; 
     $findme_dva='<P align=center><IMG height=262 src=\"/lessons/les1689/01.jpg\" width=450></P>'

и нужно удалить весь код между $findme_one и $findme_dva

  Ответить  
 
 автор: cheops   (01.03.2012 в 16:51)   письмо автору
 
   для: pautina   (01.03.2012 в 16:21)
 

Точно также находите при помощи strpos() позиции этих строк, а при помощи substr() берете голову строки и хвостик, потом соединяете их вместе. Ну плюс ко всему из результата нужно будет удалить $findme_dva (str_replace).

  Ответить  
 
 автор: pautina   (01.03.2012 в 18:25)   письмо автору
 
   для: cheops   (01.03.2012 в 16:51)
 


$findme_one='<A href=\"/lessons.php?rub=1\">Рубрика: Эффекты</A>'; 
$pos_findme_one=strpos($str, $findme_one);
$newstr_one = substr($str, 0, $pos_findme_one); // часть строки от 0 символа до позиции $findme_one

$findme_dva='<P align=center><IMG height=262 src=\"/lessons/les1689/01.jpg\" width=450></P>'; 
$pos_findme_dva=strpos($str, $findme_dva);
$newstr_dva = substr($str, $pos_findme_dva); // часть строки от символа $findme_dva до конца строки

теперь нужно объединить строки $newstr_one и $newstr_dva что использовать для объединения

  Ответить  
 
 автор: cheops   (01.03.2012 в 19:42)   письмо автору
 
   для: pautina   (01.03.2012 в 18:25)
 

Для этого используется оператор точка
<?php
  
echo  $newstr_one.$newstr_dva;
?>

  Ответить  
 
 автор: pautina   (02.03.2012 в 06:10)   письмо автору
 
   для: cheops   (01.03.2012 в 19:42)
 

А как быть если строка у нас представляет текст запроса

$str = '
CREATE TABLE IF NOT EXISTS material_content_into49 (
`ID` VARCHAR(255),
`Field 1` VARCHAR(255),
`Field 2` VARCHAR(255),
`Field 3` longtext) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

INSERT IGNORE INTO material_content_into49 (`ID`,`Field 1`,`Field 2`,`Field 3`) VALUES
('1','Уроки Photoshop','Рубрика: Эффекты','<DIV class=TextInside><BR><A id=printPage href="http://www.photoshop-master.ru/lessons.php?rub=3&amp;id=1055\"><IMG alt=распечатать src=\"/img/print.png\"></A>
<P><STRONG><A href=\"/lessons.php\">Уроки Photoshop</A></STRONG> » <STRONG><A href=\"/lessons.php?rub=1\">Рубрика: Эффекты</A></STRONG></P><BR>
<H1 style=\"TEXT-ALIGN: center\">Создаём абстрактное золотое кольцо в Фотошоп</H1>
<P align=left>В этом уроке я покажу вам, как создать абстрактную золотую сферу с эффектом дыма.</P>
<P align=center><IMG height=262 src=\"/lessons/les1689/01.jpg\" width=450></P>
<P>Для урока вам понадобятся <A href=\"http://qbrushes.net/smoke-fire/revnart-smoke-brushes/\">специальные кисти</A>.</P>
<P><STRONG>Шаг 1.</STRONG> Создаем новый документ любого размера с черным фоном. Создаем новый слой и берем <STRONG>Elliptical </STRONG><STRONG>Marquee </STRONG><STRONG>Tool</STRONG> <IMG height=23 src=\"tools/Elliptical Marquee.jpg\" width=27> (Овальное выделение) (M) с такими параметрами:</P>
<P align=center><IMG height=33 src=\"/lessons/les1689/02.jpg\" width=442></P>
<P>Зажимаем клавишу SHIFT и рисуем окружность, как показано ниже:</P>
...// участки кода
...// участки кода
<P>Данный урок подготовлен для Вас командой сайта <A href=\"http://www.photoshop-master.ru\">http://www.photoshop-master.ru</A></P>
<DIV style=\"TEXT-ALIGN: center\"><IMG height=48 alt=\"\" src=\"orphus/Oleg_Fadjarov_btn4.gif\" width=257></DIV><BR>
<DIV class=Created id=favorite><IMG src=\"images/ajax-loader.gif\"><SPAN>Добавить в закладки (личный кабинет)</SPAN> </DIV>
<DIV class=Created id=sharedButtons style=\"PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 5px; PADDING-TOP: 5px\">
...// участки кода
...// участки кода
<DIV class=Comment2SmoothBottomRight>&nbsp;</DIV></DIV></DIV></DIV><!-- / Comment --><A class=view_user_job href=\"ajax_block/view_job.php?id=407233\" rel=comment></A><A class=view_user_job href=\"ajax_block/view_job.php?id=391427\" rel=comment></A><A class=view_user_job href=\"ajax_block/view_job.php?id=391327\" rel=comment></A><A cla'),
('2'
,'Уроки Photoshop','Рубрика: Эффекты','<DIV class=TextInside><BR><A id=printPage href=\"http://www.photoshop-master.ru/lessons.php?rub=3&amp;id=1055\"><IMG alt=распечатать src=\"/img/print.png\"></A>
<P><STRONG><A href=\"/lessons.php\">Уроки Photoshop</A></STRONG> » <STRONG><A href=\"/lessons.php?rub=1\">Рубрика: Эффекты</A></STRONG></P><BR>
<H1 style=\"TEXT-ALIGN: center\">Создай экспрессивную космическую иллюстрацию в Фотошоп</H1>
<P>В этом уроке Photoshop, вы узнаете, как, используя различные техники, создать экспрессивную иллюстрацию, наполненную винтажным духом.</P>
<P>Вы узнаете, как применить несколько техник и эффектов, включая световые эффекты. Кроме техники исполнения, вы узнаете, как совместить цветовые оттенки, чтобы сделать сцену более драматичной. Некоторые шаги могут быть полезными для новичков, но почему бы не попробовать?</P>
<P>Как обычно, вы узнаете много интересного и полезного в этом уроке. Если вы хотите перейти на следующий уровень мастерства и поднять уровень своих знаний, этот урок Photoshop отлично подходит для вас. Давайте приступим!</P>
<P><A href=\"http://www.icanbecreative.com/res/space-lady/cosmolady_final.jpg\"><STRONG>Итоговый результат</STRONG></A></P>
<P align=center><IMG height=547 src=\"/lessons/les1677/1.jpg\" width=450></P>
...
<P>Данный урок подготовлен для Вас командой сайта <A href=\"http://www.photoshop-master.ru\">http://www.photoshop-master.ru</A></P>
...// участки кода
...// участки кода
<DIV class=CommentSmoothTopLeft>
<DIV cl'),
('3'
,'Уроки Photoshop','Рубрика: Эффекты','<DIV class=TextInside><BR><A id=printPage href=\"http://www.photoshop-master.ru/lessons.php?rub=3&amp;id=1055\"><IMG alt=распечатать src=\"/img/print.png\"></A>
<P>
...// участки кода
...// участки кода

Жирным шрифтом выделены нужные нам участки

$findme_one='<P>Данный урок подготовлен для Вас командой сайта <A href=\"http://www.photoshop-master.ru\">http://www.photoshop-master.ru</A></P>';
$pos_findme_one=strpos($str, $findme_one);
$newstr_one = substr($str, 0, $pos_findme_one); // часть строки от 0 символа до позиции $findme_one

$findme_dva=''),('2'';
$pos_findme_dva=strpos($str, $findme_dva);
$newstr_dva = substr($str, $pos_findme_dva); // часть строки от символа $findme_dva до конца строки

$newstr_one - шапка строки
$newstr_dva - конец строки
$findme_dva=''),('2''; нужно описать регулярным выражением
$findme_dva=''),('[0-9]''; 
- правильна ли запись

Воможно ли
- объединить переменные $newstr_one и $newstr_dva чтоб не 2 переменных были а одна $newstr например
и можно ли
- переменную $newstr описать как элемент массива (т.к сама строка это текст запроса, а записей в ней может быть 50 штук, чтоб для каждой записи был свой индекс)/STRONG

  Ответить  
 
 автор: pautina   (02.03.2012 в 13:54)   письмо автору
 
   для: pautina   (02.03.2012 в 06:10)
 

На мой взгляд задача интересна, давайте попробуем её сделать
Исходная строка из которой нужно вырезать код между $findme_one и $findme_dva такая

$str = '
CREATE TABLE IF NOT EXISTS material_content_into49 (
`ID` VARCHAR(255),
`Field 1` VARCHAR(255),
`Field 2` VARCHAR(255),
`Field 3` longtext) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

INSERT IGNORE INTO material_content_into49 (`ID`,`Field 1`,`Field 2`,`Field 3`) VALUES
('1','Уроки Photoshop','Рубрика: Эффекты','<DIV class=TextInside><BR><A id=printPage href="http://www.photoshop-master.ru/lessons.php?rub=3&amp;id=1055\"><IMG alt=распечатать src=\"/img/print.png\"></A>
<P><STRONG><A href=\"/lessons.php\">Уроки Photoshop</A></STRONG> » <STRONG><A href=\"/lessons.php?rub=1\">Рубрика: Эффекты</A></STRONG></P><BR>
<H1 style=\"TEXT-ALIGN: center\">Создаём абстрактное золотое кольцо в Фотошоп</H1>
<P align=left>В этом уроке я покажу вам, как создать абстрактную золотую сферу с эффектом дыма.</P>
<P align=center><IMG height=262 src=\"/lessons/les1689/01.jpg\" width=450></P>
<P>Для урока вам понадобятся <A href=\"http://qbrushes.net/smoke-fire/revnart-smoke-brushes/\">специальные кисти</A>.</P>
<P><STRONG>Шаг 1.</STRONG> Создаем новый документ любого размера с черным фоном. Создаем новый слой и берем <STRONG>Elliptical </STRONG><STRONG>Marquee </STRONG><STRONG>Tool</STRONG> <IMG height=23 src=\"tools/Elliptical Marquee.jpg\" width=27> (Овальное выделение) (M) с такими параметрами:</P>
<P align=center><IMG height=33 src=\"/lessons/les1689/02.jpg\" width=442></P>
<P>Зажимаем клавишу SHIFT и рисуем окружность, как показано ниже:</P>
...// участки кода
...// участки кода
<P>Данный урок подготовлен для Вас командой сайта <A href=\"http://www.photoshop-master.ru\">http://www.photoshop-master.ru</A></P>
<DIV style=\"TEXT-ALIGN: center\"><IMG height=48 alt=\"\" src=\"orphus/Oleg_Fadjarov_btn4.gif\" width=257></DIV><BR>
<DIV class=Created id=favorite><IMG src=\"images/ajax-loader.gif\"><SPAN>Добавить в закладки (личный кабинет)</SPAN> </DIV>
<DIV class=Created id=sharedButtons style=\"PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: none transparent scroll repeat 0% 0%; PADDING-BOTTOM: 5px; PADDING-TOP: 5px\">
...// участки кода
...// участки кода
<DIV class=Comment2SmoothBottomRight>&nbsp;</DIV></DIV></DIV></DIV><!-- / Comment --><A class=view_user_job href=\"ajax_block/view_job.php?id=407233\" rel=comment></A><A class=view_user_job href=\"ajax_block/view_job.php?id=391427\" rel=comment></A><A class=view_user_job href=\"ajax_block/view_job.php?id=391327\" rel=comment></A><A cla'),
('2','Уроки Photoshop','Рубрика: Эффекты','<DIV class=TextInside><BR><A id=printPage href=\"http://www.photoshop-master.ru/lessons.php?rub=3&amp;id=1055\"><IMG alt=распечатать src=\"/img/print.png\"></A>
<P><STRONG><A href=\"/lessons.php\">Уроки Photoshop</A></STRONG> » <STRONG><A href=\"/lessons.php?rub=1\">Рубрика: Эффекты</A></STRONG></P><BR>
<H1 style=\"TEXT-ALIGN: center\">Создай экспрессивную космическую иллюстрацию в Фотошоп</H1>
<P>В этом уроке Photoshop, вы узнаете, как, используя различные техники, создать экспрессивную иллюстрацию, наполненную винтажным духом.</P>
<P>Вы узнаете, как применить несколько техник и эффектов, включая световые эффекты. Кроме техники исполнения, вы узнаете, как совместить цветовые оттенки, чтобы сделать сцену более драматичной. Некоторые шаги могут быть полезными для новичков, но почему бы не попробовать?</P>
<P>Как обычно, вы узнаете много интересного и полезного в этом уроке. Если вы хотите перейти на следующий уровень мастерства и поднять уровень своих знаний, этот урок Photoshop отлично подходит для вас. Давайте приступим!</P>
<P><A href=\"http://www.icanbecreative.com/res/space-lady/cosmolady_final.jpg\"><STRONG>Итоговый результат</STRONG></A></P>
<P align=center><IMG height=547 src=\"/lessons/les1677/1.jpg\" width=450></P>
...
<P>Данный урок подготовлен для Вас командой сайта <A href=\"http://www.photoshop-master.ru\">http://www.photoshop-master.ru</A></P>
...// участки кода
...// участки кода
<DIV class=CommentSmoothTopLeft>
<DIV cl'),
('3','Уроки Photoshop','Рубрика: Эффекты','<DIV class=TextInside><BR><A id=printPage href=\"http://www.photoshop-master.ru/lessons.php?rub=3&amp;id=1055\"><IMG alt=распечатать src=\"/img/print.png\"></A>
<P>
...// участки кода
...// участки кода



$findme_one='<P>Данный урок подготовлен для Вас командой сайта <A href=\"http://www.photoshop-master.ru\">http://www.photoshop-master.ru</A></P>';
$pos_findme_one=strpos($str, $findme_one);
$newstr_one = substr($str, 0, $pos_findme_one); // часть строки от 0 символа до позиции $findme_one

$findme_dva=''),('2'';
$pos_findme_dva=strpos($str, $findme_dva);
$newstr_dva = substr($str, $pos_findme_dva); // часть строки от символа $findme_dva до конца строки

можно ли
- описать $findme_dva регулярным выражением $findme_dva=''),('[0-9]''; и после для него делать урезание строки $newstr_dva = substr($str, $pos_findme_dva);
- объединить переменные $newstr_one и $newstr_dva чтоб не 2 переменных были а одна $newstr например
- переменную $newstr описать как элемент массива (т.к сама строка это текст запроса, а записей в ней может быть 50 штук, чтоб для каждой записи был свой индекс)
ни поможете с вопросами?

  Ответить  
 
 автор: pautina   (02.03.2012 в 17:50)   письмо автору
 
   для: pautina   (02.03.2012 в 13:54)
 

ни проверите участок кода

 $newstr_one=array(); 
        $findme_one='<P>Данный урок подготовлен для Вас командой сайта <A href=\"http://www.photoshop-master.ru\">http://www.photoshop-master.ru</A></P>';    
        $pos_findme_one=strpos($str, $findme_one);   
        $newstr_one[] = substr($str, 0, $pos_findme_one); // часть строки от 0 символа до позиции $findme_one   

        $newstr_dva=array(); 
        $findme_dva="'),('[0-9]'";   
        $pos_findme_dva=strpos($str, $findme_dva);   
        $newstr_dva[] = substr($str, $pos_findme_dva); // часть строки от символа                 $findme_dva до конца строки  

        $itog_str=$newstr_one.$newstr_dva;     
        
     print_r($itog_str);

Правильно ли массив описан?
Правильно ли описано регулярное выражение $findme_dva="'),('[0-9]'";

  Ответить  
 
 автор: pautina   (03.03.2012 в 08:25)   письмо автору
 
   для: pautina   (02.03.2012 в 17:50)
 

Ни могли бы вы проверить этот участок кода

for ($i=0; $i<=10; $i++);
        {    
            $newstr_one=array(); 
            $findme_one='<P>Данный урок подготовлен для Вас командой сайта <A href=\"http://www.photoshop-master.ru\">http://www.photoshop-master.ru</A></P>';    
            $pos_findme_one=strpos($str, $findme_one);   
            $newstr_one[$i] = substr($str, 0, $pos_findme_one); // часть строки от 0 символа до позиции $findme_one   
            
            for ($n=0; $n<=10; $n++);
            {
                if ($i=$n)
                {
                $newstr_dva=array(); 
                $findme_dva="'),('$n'";   
                $pos_findme_dva=strpos($str, $findme_dva);   
                $newstr_dva[$i] = substr($str, $pos_findme_dva); // часть строки от символа                 $findme_dva до конца строки  
                
                $itog_str=$newstr_one.$newstr_dva;
                }
            }
        }
        
     print_r($itog_str);

Нет ли здесь ошибок?

  Ответить  
 
 автор: pautina   (03.03.2012 в 17:55)   письмо автору
 
   для: pautina   (03.03.2012 в 08:25)
 

Почему не отвечаете,
мы почти все с вами разобрали, 1 скрипт остался.
я просто скрипт проверить не могу из за записи строки в одинарных и двойных кавычках, чтоб это решить потом нужно будет не из строки а из текстового файла удаление делать.

for ($i=0; $i<=10; $i++); 
        {     
            $newstr_one=array();  
            $findme_one='<P>Данный урок подготовлен для Вас командой сайта <A href=\"http://www.photoshop-master.ru\">http://www.photoshop-master.ru</A></P>';     
            $pos_findme_one=strpos($str, $findme_one);    
            $newstr_one[$i] = substr($str, 0, $pos_findme_one); // часть строки от 0 символа до позиции $findme_one    
             
            for ($n=0; $n<=10; $n++); 
            { 
                if ($i=$n) 
                { 
                $newstr_dva=array();  
                $findme_dva="'),('$n'";    
                $pos_findme_dva=strpos($str, $findme_dva);    
                $newstr_dva[$i] = substr($str, $pos_findme_dva); // часть строки от символа                 $findme_dva до конца строки   
                 
                $itog_str=$newstr_one.$newstr_dva; 
                } 
            } 
        } 
         
     print_r($itog_str);

Синтаксис этого участка кода правилен?

  Ответить  
 
 автор: cheops   (03.03.2012 в 18:08)   письмо автору
 
   для: pautina   (03.03.2012 в 17:55)
 

Какие-то ошибки выводятся? Если нет, значит синтаксис правильный.

  Ответить  
 
 автор: pautina   (04.03.2012 в 07:42)   письмо автору
 
   для: cheops   (03.03.2012 в 18:08)
 

Нет ошибки не выводятся,
не подскажете как мне этот участок кода применить к текстовому файлу file.txt например

  Ответить  
 
 автор: cheops   (04.03.2012 в 14:15)   письмо автору
 
   для: pautina   (04.03.2012 в 07:42)
 

Т.е. вам содержимое файла нужно поместить в переменную $str? Тогда удобнее всего это сделать при помощи функции file_get_contents().

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования