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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вырезать подстроку из результата поиска? как вернуть лишь часть строки по шаблону 
:(
    Опции темы
skripnik
  Дата 15.3.2011, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Допустим, на входе есть такие строки:

1. Иван сказал: «Выпьем, так сказать, за знакомство»
2. Борис отметил: «Да вы, так сказать, пижон, сударь»
3. Семён подытожил: «Сегодня грядёт, так сказать, пир на весь мир»

На выходе нужно получить:

1. Выпьем за знакомство
2. Да вы пижон, сударь
3. Сегодня грядёт пир на весь мир

Как это сделать с помощью PCRE? Какой должен быть шаблон? Что-то типа этого?
Код
/.*: «(.*(?:, так сказать, ).*)»/

Но оно всё равно «так сказать» не вырезает из результатов поиска. Эта задача вообще решаема средствами PCRE?

P. S. В том-то и заковырка, что нужно обойтись именно регулярными выражениями. Хочу понять, возможно ли это или же придётся усложнять логику функции в PHP. Задача на самом деле куда сложнее, это только для наглядности такой простой пример приведён.
PM MAIL   Вверх
alezzz
Дата 15.3.2011, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



С PCRE не сталкивался, но судя по вашему выражению резальтат вы берете с первых сохраняющих скобок, но в них же входит и содержимое вторых скобок, не сохраняющих, просто результат совпадения не сохряняется в отдельную переменную. Попробуйте таким выражением с сохранением результата $1 и $2:
Код

/.*: «(.*?), так сказать,(.*?)»/


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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 30.1.2009
Где: Новосибирск

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



Код

s/^.+?«|, так сказать,|».*$//;


Но учитывая тот факт, что
Цитата
Несколько простых регулярных выражений работают быстрее, чем одно сложное

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

s/^.+?«//;
s/».*$//;
s/, так сказать,//;


Это сообщение отредактировал(а) ming - 15.3.2011, 20:12
PM MAIL ICQ Jabber   Вверх
alezzz
Дата 15.3.2011, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



Цитата(ming @  15.3.2011,  20:10 Найти цитируемый пост)
код Perl1:s/^.+?«|, так сказать,|».*$//;

к такому варианту /g в конце надо добавить

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


 




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


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

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