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

Форум Регулярные Выражения

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Замена куска кода

Сообщения:  [1-5] 

 
 автор: imustang   (19.05.2010 в 02:12)   письмо автору
 
   для: angelcorpc   (18.05.2010 в 17:16)
 

а ты не пробовал воспользоваться обычными методами
str_replace

и конкатенацию строк ?

  Ответить  
 
 автор: big-trot   (18.05.2010 в 23:58)   письмо автору
 
   для: angelcorpc   (18.05.2010 в 23:28)
 

У меня все работает. Можно внести единственную поправку.
^(?:(\\\s;)|(\\\c;)|(\\\n;))

но вряд ли она на что-то повлияет.

  Ответить  
 
 автор: angelcorpc   (18.05.2010 в 23:28)   письмо автору
 
   для: big-trot   (18.05.2010 в 22:16)
 

Вставляется только открывающий тег, а закрывающего нет.

  Ответить  
 
 автор: big-trot   (18.05.2010 в 22:16)   письмо автору
 
   для: angelcorpc   (18.05.2010 в 17:16)
 


$text="\c;
\s;extern void object::MowDown( )
\s;{
\s;    while ( true )
\s;    {
\s;        fire(1);
\s;        turn(10);
\s;    }
\s;}
\n;";
echo preg_replace("#^(\\\s;)|(\\\c;)|(\\\n;)#imse", "('\\1')?(''):(('\\2')?('<span>'):(('\\3')?('</span>'):('')))", $text);

  Ответить  
 
 автор: angelcorpc   (18.05.2010 в 17:16)   письмо автору
 
 

Я с регулярными выражениями столкнулся не давно, тк возникла необходимость.
Есть текстовый файл, к котором присутствует такой кусок:

\c;
\s;extern void object::MowDown( )
\s;{
\s;    while ( true )
\s;    {
\s;        fire(1);
\s;        turn(10);
\s;    }
\s;}
\n;


как видно - это код программы. Необходимо все "\s;" удалить, а текст, который был ими выделен, весь целиком необходимо выделить тегом.
Как составлять регулярные выражения я уже более-менее понял. Но вот тут не могу понять как организовать возможность работы с этим текстом.
Т.е. должно получится что-то вроде вот этого:

<span>
extern void object::MowDown( )
{
    while ( true )
    {
        fire(1);
        turn(10);
    }
}
</span>

попробовал составить сам выражение, но получается только бред:
"/(?s:\\\\c;.)[.\n\r]?(\\\\s;.+\n)+(?:\\\\n;[.\n\r])/"

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

P.S. вопрос еще есть, ответ на который не могу найти.
Везде пишется что для экранирования используется "\", но почему-то при попытки экранировать например "\с;" необходимо так много бекслешей. Пока не могу понять почему, помогите разобраться.

  Ответить  

Сообщения:  [1-5] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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