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

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

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Правильная расстановка мягких переносов в тексте - переменной

Сообщения:  [1-10]    [11-20]  [21-22] 

 
 автор: Ruri   (30.09.2008 в 10:31)   письмо автору
 
   для: exp   (29.09.2008 в 22:07)
 

Просто подскажите, как в регулярном выражении, которое с Вашей помощью я применяю, запретить резать слова на английском регистре (т.е. запретить трогать латиницу).

function hyphen_words($text)
{
#буква (letter)
$l = '(?:[ёЁА-я] #ё Ё А-я (все)
| [a-zA-Z]
)';

#гласная (vowel)
$v = '(?:[аеиоуыэюяё] #аеиоуыэюяё (гласные)
| [АЕИОУЫЭЮЯЁ] #АЕИОУЫЭЮЯЁ (гласные)
| (?i:[aeiouy])
)';

#согласная (consonant)
$c = '(?:[бвгджзклмнпрстфхцчшщ] #бвгджзклмнпрстфхцчшщ (согласные)
| [БВГДЖЗКЛМНПРСТФХЦЧШЩ] #БВГДЖЗКЛМНПРСТФХЦЧШЩ (согласные)
| (?i:sh|ch|qu|[bcdfghjklmnpqrstvwxz])
)';

#специальные
$x = '(?:[ЙЪЬйъь])'; #ЙЪЬйъь (специальные)

/*
#алгоpитм П.Хpистова в модификации Дымченко и Ваpсанофьева
$rules = array(
# $1 $2
"/($x) ($l$l)/sx",
"/($v) ($v$l)/sx",
"/($v$c) ($c$v)/sx",
"/($c$v) ($c$v)/sx",
"/($v$c) ($c$c$v)/sx",
"/($v$c$c) ($c$c$v)/sx"
);
*/

#improved rules by D. Koteroff
$rules = array(
# $1 $2
"/($x) ($l$l)/sx",
"/($v$c$c) ($c$c$v)/sx",
"/($v$c$c) ($c$v)/sx",
"/($v$c) ($c$c$v)/sx",
"/($c$v) ($c$v)/sx",
"/($v$c) ($c$v)/sx",
"/($c$v) ($v$l)/sx",
);

#\xad = ­
$text = preg_replace($rules, "$1\xad$2", $text); // не \xc2\xad
return $text;
}

  Ответить  
 
 автор: exp   (29.09.2008 в 22:07)   письмо автору
 
   для: Ruri   (29.09.2008 в 18:48)
 

Как чайник чайнику , советую Вам подумать не применить-ли например
просто style="text-align:justify;" (если не путаю буквы в слове justify ) к блоку в который выводится этот html-текст
, а то непонятно что Вам хочется от алгоритма который находит куда в любое слово ,можно было-бы вставить перенос слова, если можно.

>Об-зор бри-танс-кой и аме-риканс

а сложный анализ этого html-текста
, с целью определить куда именно нужно поставить перенос , да ещё незадев разметку,,
он сделает лучше всего только то, что в десятки - сотни, раз, замедлит генерацию этой самой странички
, оформление которой вы и хотите сделать лучше , применяя переносы слов по слогам ,
если я вообще понял для чего вам это нужно

  Ответить  
 
 автор: Ruri   (29.09.2008 в 18:48)   письмо автору
 
   для: EXP   (26.09.2008 в 01:48)
 

У меня текст статьи полностью, вместе с тегами хранится в Базе Данных. Так её туда редактор засовывает. А когда я вывожу статью для пользователя, вся статья, как одна переменная прогоняется через функцию расстановки мягких переносов. Вот и получается такая маленькая неприятность... Где и Что я делаю не правильно ??? Подскажите, пожалуйста !!!

  Ответить  
 
 автор: EXP   (26.09.2008 в 01:48)   письмо автору
 
   для: Ruri   (24.09.2008 в 18:14)
 

Как Вы её используете ?
Почему у Вас прогоняется через функцмю всё , включая теги ?

  Ответить  
 
 автор: Ruri   (24.09.2008 в 18:14)   письмо автору
 
   для: Ruri   (29.08.2008 в 17:29)
 

Проявилась маленькая неприятность... Функция работает замечательно, но она режет и активные ссылки. Вместо примерно такого http://arhiv.ru/trekus.mp3 появляется на экране
http://ar-hiv.ru/tre-kus.mp3

Может кто-нибудь что-либо подсказать, пожалуйста ???

  Ответить  
 
 автор: Ruri   (29.08.2008 в 17:29)   письмо автору
 
   для: xx77   (29.08.2008 в 14:12)
 

Большое спасибо !!!

  Ответить  
 
 автор: xx77   (29.08.2008 в 14:12)   письмо автору
 
   для: Ruri   (29.08.2008 в 09:57)
 

этот алгоритм должен работать только с чистым текстом , без html.
и для того что-бы применить его для форматирования блока текста , Вам нужен ещё один алгоритм.
Который будет считать ширину в пикселях занимаемую строкой , применительно
к используемому шрифту. Точнее будет прибавлять ширину занимаемую каждым символом к общей ширине строки.
регулярные выражения работают только с байтами, и даже сосчитать по байтам нужен алгоритм точнее чем например такой
<?php
function mp($match)  
{  
    
$l '[ёЁА-я]'
    
$v '(?:[аеиоуыэюяё]|[АЕИОУЫЭЮЯЁ])'
    
$c '(?:[бвгджзклмнпрстфхцчшщ]|[БВГДЖЗКЛМНПРСТФХЦЧШЩ])'
    
$x '[ЙЪЬйъь]';
 
$rules 
"/^($x(?=$l$l)|$v$c$c(?=$c$c$v)|$v$c$c(?=$c$v)|$v$c(?=$c$c$v)|$c$v(?=$c$v)|$v$c(?=$c$v)|$c$v(?=$v$l))(.+)/"
 
##########################################################
 
if (isset($match[3] )  &&  ($txt preg_replace($rules'$1-' ."\n" '$2'$match[2], 1) ) != $match[2]) return $match[1] . $txt;
 else  return  
$match[1] . $match[2] . "\n" 
##end function

$text 'Длинный длинный текст
с малым числом переноса строк'
;

$text split("[\r\n]+"$text);
# print_r($text );
print '<pre style="border:solid 3px red; width:40em; padding:15px">'
 
implode("\n", ($text preg_replace_callback(
'#(.{0,45}[^ЁёА-я])(.{3,6}[^ЁёА-я]|([ЁёА-я]+))#',
 
'mp'$text)))
 . 
'</pre>'

?>

  Ответить  
 
 автор: Trianon   (29.08.2008 в 12:39)   письмо автору
 
   для: Ruri   (29.08.2008 в 09:57)
 

Посмотрите предпоследнюю строку скрипта.
Вы выполняете замену на минус, а не на мягкий перенос.

  Ответить  
 
 автор: Ruri   (29.08.2008 в 09:57)   письмо автору
 
   для: Ruri   (28.08.2008 в 17:34)
 

Прлучился УЖАС !!!

Об-зор бри-танс-кой и аме-риканс-кой прес-сы за 13 ав-густа 2008 по си-ту-ации в Юж-ной Осе-тии и вок-руг нее.
Вот уже поч-ти не-делю за-пад-ная пе-чать пре-быва-ет в кон-ту-жен-ном сос-то-янии пос-ле мас-си-рован-ных уда-ров гру-зинс-ко-го про-паган-дист-ско-го «ору-жия мас-со-вого по-раже-ния» – изощ-ренной лжи о про-ис-хо-дящем в Юж-ной Осе-тии. Но, по-хоже, не-кото-рые за-пад-ные жур-на-лис-ты на-чали при-ходить в се-бя, пы-та-ясь бо-лее адек-ватно от-ра-жать си-ту-ацию гру-зино-осе-тинс-ко-го конф-лик-та.

Все "мягкие переносы появились в браузере !!! Пли-и-и-и-из !!!! Что делать ????

  Ответить  
 
 автор: Ruri   (28.08.2008 в 17:34)   письмо автору
 
   для: xx77   (27.08.2008 в 22:52)
 

Большое-пребольшое СПАСИБО !!! Сейчас буду пробовать !!!

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-22] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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