[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите разобраться с регулярными выражениями
verhmax
Добрый день, я только учусь, и меня возникла сложно, подозревая что можно сделать только регулярными выражениями.

Есть текст "Привет всем. Как дела Когда к нам в гости?"
вот в этом тексте есть три предложения, предложения всегда начинаются с большой буквы и имеют знак препинания (. или ? или !) а то предложение "Как дела" которое без знака, оно лишнее, и его нужно удалить и получить в результате "Привет всем. Когда к нам в гости?"
Тексты всегда разные sad.gif
Как такое реализовать?
Заранее спасибо за помощь!
Миша
Цитата (verhmax @ 25.02.2017 - 15:47)
Добрый день, я только учусь

Сделать можно, изучайте - preg_replace


_____________
Принимаю заказы, писать в ЛС
inpost
verhmax
Первая мысль пришла регулярным выражением, очень простым. Может кто-то предложит другой вариант решений, я пока не придумал.
В общем ответ на твой вопрос - да, регулярное выражение.

Как сделать? Самое важное определи как начинается новое предложение и его уникальность. Допустим в данном случае идёт БОЛЬШАЯ буква, значит в тексте не может быть просто больших букв и я не могу на тебя покричать? Если это так и есть, то проверяй так: Большая буква, любой текст, и без разделителя большая буква - вырезать, обычный preg_replace.

Конечно если там могут быть просто большие буквы в тексте, то ты определи как распознать, что это новое предложение, а не просто большие буквы.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
verhmax
$result = preg_replace("#^(а-яё )(\.|!|?)(а-яё )(\.|!|?)(а-яё )(\.|!|?)$#ui", '$1 $5', $test);

$result пустой sad.gif
Миша
$test = "Привет всем! Как дела. Когда к нам в гости?";
$result = preg_replace("#^([а-яё ]+)([\.!?])([а-яё ]+)([\.!?])([а-яё ]+)([\.!?])$#ui", '$1$2$5$6', $test);


_____________
Принимаю заказы, писать в ЛС
verhmax
$result = preg_replace("#^([а-яё ]+)([\.!?])([а-яё ]+)([\.!?])([а-яё ]+)([\.!?])$#ui", '$1$2$5$6', $test);
- вывел полностью всё, ничего не убрал.


пока мучался, решил упростить задачу:

найти с помощью preg_match_all всё что между точкой и Большой буквой и просто удалить, но что-то не выходит :(

preg_match_all("!.(.*?)[^А-Я]+!si", $text, $result);
Миша
$test = "Привет всем! Как дела Когда к нам в гости?";
$result = preg_replace("#^([А-ЯЁ][а-яё \.,!?]+)[А-ЯЁ][а-яё ,]+[^\.!?]([А-ЯЁ][а-яё \.,!?]+)$#u", '$1$2', $test);


_____________
Принимаю заказы, писать в ЛС
verhmax
да, я знаю что $test и $text это разные переменные, я просто вставляю кусок кода из своего скрипта
Миша
Проверьте ещё раз.

_____________
Принимаю заказы, писать в ЛС
inpost
[А-Я][^.!?]*([А-Я]) меняешь на $1. Всё. Это на скорую руку, просто саму суть показать.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.