|
|
|
| Я с регулярными выражениями столкнулся не давно, тк возникла необходимость.
Есть текстовый файл, к котором присутствует такой кусок:
\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. вопрос еще есть, ответ на который не могу найти.
Везде пишется что для экранирования используется "\", но почему-то при попытки экранировать например "\с;" необходимо так много бекслешей. Пока не могу понять почему, помогите разобраться. | |
|
|
|
|
|
|
|
для: 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);
|
| |
|
|
|
|
|
|
|
для: big-trot
(18.05.2010 в 22:16)
| | Вставляется только открывающий тег, а закрывающего нет. | |
|
|
|
|
|
|
|
для: angelcorpc
(18.05.2010 в 23:28)
| | У меня все работает. Можно внести единственную поправку.
^(?:(\\\s;)|(\\\c;)|(\\\n;))
|
но вряд ли она на что-то повлияет. | |
|
|
|
|
|
|
|
для: angelcorpc
(18.05.2010 в 17:16)
| | а ты не пробовал воспользоваться обычными методами
str_replace
и конкатенацию строк ? | |
|
|
|