Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: замена строчных на прописные
 
 автор: Anatoly_ua   (10.09.2008 в 00:19)   письмо автору
 
 

Можно сделать так, чтобы все буквы с которых начинается предложение становились заглавными?
Предложение -- то, что заканчивается на . ! или ? с последующим пробелом и/или тэгом (например, </p>)

  Ответить  
 
 автор: xx77   (10.09.2008 в 01:07)   письмо автору
 
   для: Anatoly_ua   (10.09.2008 в 00:19)
 

можно попробовать так, если работает(не пробовал)
<?
$txt 
preg_replace('#([!\.>\?]\s+)([a-zа-яё])#e''\'$1\' . strtolower(\'$2\')'$txt);

но думаю скорее всего будет переводить не только то что нужно

  Ответить  
 
 автор: xx77   (10.09.2008 в 01:18)   письмо автору
 
   для: xx77   (10.09.2008 в 01:07)
 

> с последующим пробелом и/или тэгом (например, </p>)

не сразу обратил внимание

<? 
$txt 
preg_replace('#([!\.\?](?:\s+|</p>)+)([a-zа-яё])#e''\'$1\' . strtolower(\'$2\')'$txt);

  Ответить  
 
 автор: Anatoly_ua   (10.09.2008 в 15:01)   письмо автору
 
   для: xx77   (10.09.2008 в 01:18)
 

У меня вот по такому шаблону все отлично находится (сайт и скрипты в utf8):


$txt = preg_replace('#([!?.](?:\s*(?:<.*?>)*\s*))([a-zа-яё])#smu', '$1' . toupper('$2'), $test)


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



function toupper($content) {
$content = str_replace(
array("а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "р", "п", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ь", "ы", "э", "ю", "я"),
array("А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "Р", "П", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ь", "Ы", "Э", "Ю", "Я"),
$content);
return strtoupper($content);
}


не помогло...
Можно как-то с русским текстом решить проблему?

  Ответить  
 
 автор: xx77   (10.09.2008 в 18:37)   письмо автору
 
   для: Anatoly_ua   (10.09.2008 в 15:01)
 

<?php
header
('Content-type:text/html; charset=utf-8'); 

/*
говорят что не под Windows можно так
*/
print setlocale(LC_ALL0) . '<hr/>'// вывод текущего значения локали
echo '<pre>' strtoupper('значение') . '<hr>'
setlocale (LC_CTYPE'ru_RU.UTF-8'); 
# установка  LC_CTYPE
print setlocale(LC_ALL0) . '<hr/>';  # вывод
echo strtoupper('значение') . '<hr>'
/*
а так , если подключена  mbstring
*/
echo mb_strtoupper'значение''UTF-8' );
?>

  Ответить  
 
 автор: Anatoly_ua   (10.09.2008 в 21:36)   письмо автору
 
   для: xx77   (10.09.2008 в 18:37)
 

Я тут поэкспериментировал...


<?php
header
('Content-type:text/html; charset=utf-8');

$text 'word. capital';


setlocale(LC_ALL,'ru_RU.utf8');
print 
setlocale(LC_ALL0);

$result1 preg_replace('#([!?.](?:\s*(?:<.*?>)*\s*))([a-zа-яё])#smu''$1' strtoupper('$2'), $text);
$result2 strtoupper($text);
$result3 mb_strtoupper($text"UTF-8");
$result4 toupper($text);

echo 
"
<pre>
1: 
$result1

2: 
$result2

3: 
$result3

4: 
$result4

</pre>
"
;





function 
toupper($content) {
$content str_replace(
array(
"а""б""в""г""д""е""ё""ж""з""и""й""к""л""м""н""о""р""п""с""т""у""ф""х""ц""ч""ш""щ""ъ""ь""ы""э""ю""я"),
array(
"А""Б""В""Г""Д""Е""Ё""Ж""З""И""Й""К""Л""М""Н""О""Р""П""С""Т""У""Ф""Х""Ц""Ч""Ш""Щ""Ъ""Ь""Ы""Э""Ю""Я"),
$content);
return 
strtoupper($content);
}


?>


Похоже, в preg_replace вообще функции нельзя применять, потому что не работает даже с англ. Или где ошибка есть?

Результат такой:
с англ.:

ru_RU.utf8
1: word. capital
2: WORD. CAPITAL
3: WORD. CAPITAL
4: WORD. CAPITAL


с русским:

ru_RU.utf8
1: слово. заглавная
2: слово. заглавная
3: СЛОВО. ЗАГЛАВНАЯ
4: СЛОВО. ЗАГЛАВНАЯ

  Ответить  
 
 автор: Anatoly_ua   (10.09.2008 в 21:51)   письмо автору
 
   для: Anatoly_ua   (10.09.2008 в 21:36)
 

все оказалось проще, нужно было использовать preg_replace_callback():

<?php
/* ... */
function capitalize ($matches) {
    return 
$matches[1] . toupper($matches[2]);
}

setlocale(LC_ALL,'ru_RU.utf8');
print 
setlocale(LC_ALL0);

$result1 preg_replace_callback('#([!?.](?:\s*(?:<.*?>)*\s*))([a-zа-яё])#smu'"capitalize"$text);
/* ... */
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования