General Fizz
Боевой Генерал :)
- Регистрация
- 11 Апр 2007
- Сообщения
- 754
- Реакции
- 428
- Автор темы
- #1
В общем есть задача автоматической расстановки переносов для русских слов. Алгоритм ее следующий:
Реализация на Javascript:
Также эта задача решена на perl следующим образом:
Как этот код переписать на php?
Или может кому известно уже готовое решение?
Код:
К тексту последовательно применяются шесть правил-замен:
1. х → х-
2. гг → г-г
3. гссг → гс-сг
4. сгсг → сг-сг
5. гсссг→ гс-ссг
6. гссссг → гсс-ссг
«х» — одна из букв «ьъй», «c» — согласная, «г» — гласная, «-» — вставляемый знак переноса
Реализация на Javascript:
Код:
var RusA = "[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]";
var RusV = "[аеёиоуыэю\я]";
var RusN = "[бвгджзклмнпрстфхцчшщ]";
var RusX = "[йъь]";
var Hyphen = "\xAD";
var re1 = new RegExp("("+RusX+")("+RusA+RusA+")","ig");
var re2 = new RegExp("("+RusV+")("+RusV+RusA+")","ig");
var re3 = new RegExp("("+RusV+RusN+")("+RusN+RusV+")","ig");
var re4 = new RegExp("("+RusN+RusV+")("+RusN+RusV+")","ig");
var re5 = new RegExp("("+RusV+RusN+")("+RusN+RusN+RusV+")","ig");
var re6 = new RegExp("("+RusV+RusN+RusN+")("+RusN+RusN+RusV+")","ig");
text = text.replace(re1, "$1"+Hyphen+"$2");
text = text.replace(re2, "$1"+Hyphen+"$2");
text = text.replace(re3, "$1"+Hyphen+"$2");
text = text.replace(re4, "$1"+Hyphen+"$2");
text = text.replace(re5, "$1"+Hyphen+"$2");
text = text.replace(re6, "$1"+Hyphen+"$2");
Также эта задача решена на perl следующим образом:
Код:
$RusAll = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
$RusV = "аеёиоуыэюя";
$RusN = "бвгджзклмнпрстфхцчшщ";
$RusX = "ьъй";
$Hyphen = "-";
$text =~ s/(?<=[$RusAll])([$RusX])(?=[$RusAll]{2})/\1$Hyphen/ig;
$text =~ s/(?<=[$RusAll])([$RusV])(?=[$RusV][$RusAll])/\1$Hyphen/ig;
$text =~ s/(?<=[$RusV])([$RusN])(?=[$RusN][$RusV])/\1$Hyphen/ig;
$text =~ s/(?<=[$RusN])([$RusV])(?=[$RusN][$RusV])/\1$Hyphen/ig;
$text =~ s/(?<=[$RusV])([$RusN])(?=[$RusN][$RusN][$RusV])/\1$Hyphen/ig;
$text =~ s/(?<=[$RusV][$RusN])([$RusN])(?=[$RusN][$RusN][$RusV])/\1$Hyphen/ig;
Как этот код переписать на php?
Или может кому известно уже готовое решение?