2012-05-03 2 views
1

У меня есть эта конкретная строка текста и отправки клиентов, и линия автоматически разбивается на 65 символов, и мне нужно изменить свое регулярное выражение, чтобы найти еще одну дополнительную строку, вернуть каретки или новую строки до первой метки препинания таких как.,!,?Соответствующие символы, включая разрывы строк и возвратные вагоны

Пример линии, совпадающим .:

Snippet: It's time again for the Annual State Marching Event, This Saturday at 5pm. 

В строке выше, превышает 65 символов, а иногда линии разбиты, как этот

Snippet: It's time again for the Annual State Marching Event, This 
Saturday at 5pm. 

который появляется, как Event, This\r\n Это regexp i use:

preg_match('/Snippet:(\s)?+(.*)\./i', $html_part, $matches) ? $matches[2] : ''; 

Я попытался выиграть, чтобы избежать знаков препинания, но не повезло. Любая помощь будет оценена по достоинству. Заранее спасибо.

ответ

2

Попробуйте модификатор s, например, так:

/Snippet:(\s)?+(.*)\./is 

Если этот модификатор установлен, точка метасимволом в шаблоне соответствует все символы, включая символ новой строки. Без него новые строки исключаются. Этот модификатор эквивалентен модификатору Perl/s. Отрицательный класс , такой как [^ a], всегда соответствует символу новой строки, независимо от установки этого модификатора .

Source

Demo

+0

Но у меня есть эти строки среди некоторых других текста в абзаце, поэтому я только хочу, чтобы остановиться на знак препинания. Модификатор s завершает захват других данных за пределы того, что мне нужно. – Tower

+0

Попробуйте сделать группу захвата неживой: '(. *?)' – nickb

+0

Используя этот '/ Snippet: (\ s)? + (. *) \ ./ Uis' работал, но как я все еще сохраняю знак препинания, так что это выглядит как полное предложение? – Tower

Смежные вопросы