Модераторы: ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите составить регулярное выражение, удалить несколько строчек между А и Б 
:(
    Опции темы
Suppir
Дата 28.12.2010, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



$a = '
Наименование показателя
\par\pard\plain
\intbl\fi720\qj\hyphpar1

\par\pard\plain
\intbl\fi720\qj\hyphpar1

\par\pard\plain
\intbl\fi720\qj\hyphpar1

\cell\pard\plain
'

Каким образом удалить одним регулярным выражением все данные МЕЖДУ строчками А и Б. Причем:

Строчка А не должна начинаться на "\"
Строчка Б начинается на "\cell"


Т.е. нужно удалить все данные между строчкой 'Наименование показателя' и '\cell\pard\plain'. В результате должно получиться:

$a = '
Наименование показателя
\cell\pard\plain
'
PM MAIL   Вверх
patap
Дата 28.12.2010, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: нет
Всего: 40



я в перле не рублю )), но вот с такой регуляркой в пхп получилось
Код

([^\\].*?)\\.*?(\\cell)


Код

  $exp = '#([^\\\].*?)\\\.*?(\\\cell)#s';
  $str = preg_replace($exp, '$1$2', $str);
  echo $str;


вот общий дамп результата работы регулярки, при удовлетворительном результате
Код

Array
(
    [0] => 
  Наименование показателя
\par\pard\plain
\intbl\fi720\qj\hyphpar1

\par\pard\plain
\intbl\fi720\qj\hyphpar1

\par\pard\plain
\intbl\fi720\qj\hyphpar1

\cell
    [1] => Наименование показателя

    [2] => \cell
)



может что-то поможет

Это сообщение отредактировал(а) patap - 28.12.2010, 18:38


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
alezzz
Дата 28.12.2010, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 11
Всего: 14



Код

$a =~ s/([^\\].*?)\\.*?(\\cell.*?\n)/$1$2/s;


Это сообщение отредактировал(а) alezzz - 28.12.2010, 18:48
PM MAIL   Вверх
Suppir
Дата 28.12.2010, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Есть проблема с вашими вариантами. Если между А и Б содержится какой-то важный текст (строчка 'Тра-та-та'), то он исчезает. А должен остаться. 
Можно вырезать только строки, которые удовлетворяют выражению /^\s*$|^\/;   (т.е. или пустые или начинающиеся с '\');

Код

$a = '
Наименование показателя
\par\pard\plain
\intbl\fi720\qj\hyphpar1

Тра-та-та. Эта строчка должна остаться
\par\pard\plain
\intbl\fi720\qj\hyphpar1

\par\pard\plain
\intbl\fi720\qj\hyphpar1

\cell\pard\plain
';


$a=~ s/([^\\].*?)\\.*?(\\cell.*?\n)/$1$2/s;

print $a;

<>





В результате должно напечатать:

Наименование показателя
\par\pard\plain
\intbl\fi720\qj\hyphpar1

Тра-та-та. Эта строчка должна остаться
\cell\pard\plain




А сейчас печатает:

Наименование показателя
\cell\pard\plain









Это сообщение отредактировал(а) Suppir - 28.12.2010, 20:18
PM MAIL   Вверх
alezzz
Дата 29.12.2010, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 11
Всего: 14



Код

$a =~ s/(.*\n[^\\\n].*?\n)(.*?)(\\cell)/$1$3/s;


При условии что перед строкой А есть еще хотя-бы 1 строка. Как минимум с примером работает smile.

Это сообщение отредактировал(а) alezzz - 29.12.2010, 08:47
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




[ Время генерации скрипта: 0.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.