Первая буква в предложении - прописная, как?

Статус
В этой теме нельзя размещать новые ответы.

Starik777

Постоялец
Регистрация
19 Апр 2008
Сообщения
66
Реакции
35
Привет всем. Такое дело. Генерируется текст. Предложения - все слова строчными буквами. Заканчиваются предложения на .,!?
Хочется: чтобы все предложения начинались с заглавной буквы. Можно ли это сделать регулярными выр-ниями, а то я это так коряво делаю - разбиваю предложения на символы и первый символ делаю заглавным. Язык PHP.
 
зачем тебе регулярка, выводи текст частями

$string = "bla-bla-bla"; //строка
$firsLetter = substr( $string , 0, 1); //получаеш перввую букву
$firsLetter = strtoupper($firsLetter); // переводиш в заглавную букву
$string = substr( $string , 1);//все кроме первой буквы
echo .$firsLetter.$string; //выводим нужное

Теперь додумай алгоритм разбора строки что б получить все что между .!? и будет счастье
 
Спасибо. Но это я как раз так и делаю :confused:. Я понимаю что этот путь простой и в принципе естественный, а так же он не плохо работает.
Давайте я перефразирую вопрос: из чисто академических и эстетических чувств, мне интересно как эту задачу можно решить регулярками. Или нельзя?
В частности как букву заглавной сделать? preg_replace('~(a)~',strtoupper("\$1"),$text); - не работает, или я что-то не понимаю?
 
В частности как букву заглавной сделать? preg_replace('~(a)~',strtoupper("\$1"),$text); - не работает, или я что-то не понимаю?
Алгоритм:
1. Имеем строку.
2. определяемся с pattern - то что мы ищем(симолы .!? + 2 знака после него, первый знак пробел, второй это первая буква кооторую нужно изменить)
3. Определяемся с replacement - на что заменяем (найдененый патерн заменяем на strtoupper($pattern)

Пишем регуляторку preg_replace

PHP:
SetLocale(LC_CTYPE, "ru_RU.CP1251");
$text="текст. текст? текст! текст текст.\ntext. text? text! text text";
echo 'Исходная строка<BR>';
echo $text;
$pattern = "#(?<=[.?!]|^)(\s*)([a-zа-я])#s";
$text = preg_replace_callback($pattern, "f_replace", $text);
echo '<BR>Строка после замены<BR>';
echo $text;
function f_replace($arr) {
   return $arr[1] . strtoupper($arr[2]);
}
 
Достаточно разбить текст на предложения, далее Пример оттуда же (хотя я бы делал по другому)
PHP:
<?php

function sentence_cap($impexp, $sentence_split) {
    $textbad=explode($impexp, $sentence_split);
    $newtext = array();
    foreach ($textbad as $sentence) {
        $sentencegood=ucfirst(strtolower($sentence));
        $newtext[] = $sentencegood;
    }
    $textgood = implode($impexp, $newtext);
    return $textgood;
}

$text = "this is a sentence. this is another sentence! this is the fourth sentence? no, this is the fourth sentence.";
$text = sentence_cap(". ",$text);
$text = sentence_cap("! ",$text);
$text = sentence_cap("? ",$text);

echo $text; // This is a sentence. This is another sentence! This is the fourth sentence? No, this is the fourth sentence.

?>
 
Предложу упрощённый вариант поста #4. Предполагается, что русская локаль уже установлена.
PHP:
$text = 'this is a sentence.
this is another sentence!
this is the fourth sentence? no, this is the fourth sentence.';
echo preg_replace('/(^|[.!?]\s+)([a-zа-я])/ie',"'$1'.strtoupper('$2')",$text);
 
PHP это хорошо, а если есть люди в теме подскажите плиз можно ли эту же задачу сделать в TextPipe Pro, вроде все там перерыл, ничерта не получается. Или это в нме и не предусмотрено.
В общем пробовал там и Pattern, Perl Pattern
из блока замены так ^[.] и замена на $$ и все это с сабфильтером UPPERCASE! Как правильно указать первый символ строки, мне кажется проблема в этом...
 
Задача вообще практически нерешаема, т.к. точка используется не только для обозначения конца предложения, но и для сокращ.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху