|
|
|
| Здравствуйте!!! Помогите, пожалуйста, "чайнику" с созданием регулярного выражения для ПХП скрипта, для правильной с точки зрения грамматики русского языка, расстановки "мягких переносов" при выводе текста в броузере!!! Может ли кто-нибудь помочь в этом сложном деле ??? И можно ли такой скрипт сделать мультиязычним? Например, для английского языка, для русского и для украинского??? | |
|
|
|
|
|
|
|
для: Ruri
(20.08.2008 в 17:02)
| | > правильной с точки зрения грамматики русского языка, расстановки "мягких переносов"
наверное плохо учился в школе но ничего из этого не понял. точнее не понял какие действия должен выполнить скрипт и примерно над каким текстом , неследующим не понимаю каким правилам грамматики.
> для английского языка, для русского и для украинского
думаю что обрабатываемый текст только в кодировке UTF-8 ,из часто-применяемых кодировок,
может одновременно содержать, наборы букв всех трёх языков, но не уверен на все 100 процентов | |
|
|
|
|
|
|
|
|
для: Trianon
(21.08.2008 в 00:02)
| | Большое Спасибо !!! Не верю своим глазам !!! Оно таки работает !!! Ур-р-р-р-р-а !!! | |
|
|
|
|
|
|
|
для: Ruri
(21.08.2008 в 11:46)
| | Помогите, пожалуйста, снова !!!
Предложенная функция, действительно отлично работает !!! Но !!! Она также режет мягкими переносами и УРЛы !!! Это кошмар наяву !!! Ни одна внешняя ссылка на сайте не работает !!! Помогите сделать "для чайника" исключение в функции расстановки мягких переносов, чтобы УРЛы оставались целыми !!! Пожалуйста !!!
Или хотя бы ещё одно регулярное выражение, которое бы из УРЛов вырезало всё что непотребно там быть. Help !!! | |
|
|
|
|
|
|
|
для: Ruri
(25.08.2008 в 17:39)
| | А URLы там каким боком? В URL нет и не может быть никакой кириллицы.
Да и функция предназначена для разбивки исколючительно русского текста.
Никаких URL опять же в аргументах быть не может по определению. | |
|
|
|
|
|
|
|
для: Trianon
(25.08.2008 в 18:14)
| | Урлы эта классная штуковина режет по всем правилам мягких переносов !!!
Например: http://ram-bler.ru или http://za-zhi-to-mir.info
То есть в Урлах появляются мягкие переносы, которые там вообще не должны быть в природе ... | |
|
|
|
|
|
|
|
для: Ruri
(26.08.2008 в 16:36)
| | Хе-хе-хе... неплохо режет, однако :))
ну так уберите из выражений списки латинских букв. | |
|
|
|
|
|
|
|
для: Trianon
(26.08.2008 в 17:05)
| | Спасибо за подсказку !!! Сейчас попробую !!! Может что и получится !!! Сердечно благодарю, что не оставили в беде !!! | |
|
|
|
|
|
|
|
для: Ruri
(26.08.2008 в 18:17)
| | function hyphen_words($text)
{
// - временная заплата
return $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;
}
//echo hyphen_words("Проверка алгоpитма");
Извиняюсь ещё раз !!! Но в каком месте нужно отключить латинские буквы ??? | |
|
|
|
|
|
|
|
для: Ruri
(26.08.2008 в 18:48)
| | Ну, пожалуйста, помогите "чайнику" !!! Уж очень эта проблема припекла !!! С меня пиво по факсу !!!
Или лучше, скажите, пожалуйста, как через регулярные выражения только из УРЛов выбросить мягкие переносы ??? | |
|
|
|
|
|
|
|
для: Ruri
(27.08.2008 в 17:32)
| | только с русскими буквами применрно так
<?
function hyphen_words($text)
{
#буква (letter)
$l = '[ёЁА-я]';
#гласная (vowel)
$v = '(?:[аеиоуыэюяё]|[АЕИОУЫЭЮЯЁ])';
#согласная (consonant)
$c = '(?:[бвгджзклмнпрстфхцчшщ]|[БВГДЖЗКЛМНПРСТФХЦЧШЩ])';
#специальные
$x = '[ЙЪЬйъь]'; #ЙЪЬйъь (специальные)
$rules = array(
"/($x)($l$l)/sx",
"/($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)/",
);
$text = preg_replace($rules, "$1-$2", $text); // не \xc2\xad
return $text;
}
|
| |
|
|
|
|
|
|
|
для: xx77
(27.08.2008 в 22:52)
| | Большое-пребольшое СПАСИБО !!! Сейчас буду пробовать !!! | |
|
|
|
|
|
|
|
для: Ruri
(28.08.2008 в 17:34)
| | Прлучился УЖАС !!!
Об-зор бри-танс-кой и аме-риканс-кой прес-сы за 13 ав-густа 2008 по си-ту-ации в Юж-ной Осе-тии и вок-руг нее.
Вот уже поч-ти не-делю за-пад-ная пе-чать пре-быва-ет в кон-ту-жен-ном сос-то-янии пос-ле мас-си-рован-ных уда-ров гру-зинс-ко-го про-паган-дист-ско-го «ору-жия мас-со-вого по-раже-ния» – изощ-ренной лжи о про-ис-хо-дящем в Юж-ной Осе-тии. Но, по-хоже, не-кото-рые за-пад-ные жур-на-лис-ты на-чали при-ходить в се-бя, пы-та-ясь бо-лее адек-ватно от-ра-жать си-ту-ацию гру-зино-осе-тинс-ко-го конф-лик-та.
Все "мягкие переносы появились в браузере !!! Пли-и-и-и-из !!!! Что делать ???? | |
|
|
|
|
|
|
|
для: Ruri
(29.08.2008 в 09:57)
| | Посмотрите предпоследнюю строку скрипта.
Вы выполняете замену на минус, а не на мягкий перенос. | |
|
|
|
|
|
|
|
для: 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>';
?>
|
| |
|
|
|
|
|
|
|
для: xx77
(29.08.2008 в 14:12)
| | Большое спасибо !!! | |
|
|
|
|
|
|
|
для: Ruri
(29.08.2008 в 17:29)
| | Проявилась маленькая неприятность... Функция работает замечательно, но она режет и активные ссылки. Вместо примерно такого http://arhiv.ru/trekus.mp3 появляется на экране
http://ar-hiv.ru/tre-kus.mp3
Может кто-нибудь что-либо подсказать, пожалуйста ??? | |
|
|
|
|
|
|
|
для: Ruri
(24.09.2008 в 18:14)
| | Как Вы её используете ?
Почему у Вас прогоняется через функцмю всё , включая теги ? | |
|
|
|
|
|
|
|
для: EXP
(26.09.2008 в 01:48)
| | У меня текст статьи полностью, вместе с тегами хранится в Базе Данных. Так её туда редактор засовывает. А когда я вывожу статью для пользователя, вся статья, как одна переменная прогоняется через функцию расстановки мягких переносов. Вот и получается такая маленькая неприятность... Где и Что я делаю не правильно ??? Подскажите, пожалуйста !!! | |
|
|
|
|
|
|
|
для: Ruri
(29.09.2008 в 18:48)
| | Как чайник чайнику , советую Вам подумать не применить-ли например
просто style="text-align:justify;" (если не путаю буквы в слове justify ) к блоку в который выводится этот html-текст
, а то непонятно что Вам хочется от алгоритма который находит куда в любое слово ,можно было-бы вставить перенос слова, если можно.
>Об-зор бри-танс-кой и аме-риканс
а сложный анализ этого html-текста
, с целью определить куда именно нужно поставить перенос , да ещё незадев разметку,,
он сделает лучше всего только то, что в десятки - сотни, раз, замедлит генерацию этой самой странички
, оформление которой вы и хотите сделать лучше , применяя переносы слов по слогам ,
если я вообще понял для чего вам это нужно | |
|
|
|
|
|
|
|
для: 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;
} | |
|
|
|