Как переписать скрипт с регулярками с perl на php?

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

General Fizz

Боевой Генерал :)
Регистрация
11 Апр 2007
Сообщения
754
Реакции
428
В общем есть задача автоматической расстановки переносов для русских слов. Алгоритм ее следующий:
Код:
К тексту последовательно применяются шесть правил-замен:
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?

Или может кому известно уже готовое решение?
 
PHP:
$RusAll = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
$RusV = "аеёиоуыэюя";
$RusN = "бвгджзклмнпрстфхцчшщ";
$RusX = "ьъй";
$Hyphen = "-";

$text = preg_replace("#(?<=[$RusAll])([$RusX])(?=[$RusAll]{2})#ig","#\1$Hyphen#", $text);
B так далее... Функция preg_replace("Что_меняем", "На_что_меняем","где_меняем").
Перл совместимые регулярные выражения.
 
B так далее... Функция preg_replace("Что_меняем", "На_что_меняем","где_меняем").
Перл совместимые регулярные выражения.

Не работает. В пхп перл-совместимых регулярных выражениях нет модификатора g. При подставлении указанного шаблона
Код:
$text = preg_replace("#(?<=[$RusAll])([$RusX])(?=[$RusAll]{2})#ig","#\1$Hyphen#", $text);
на выходе полный бред с "#" и пропавшими буквами.
 
Не работает. В пхп перл-совместимых регулярных выражениях нет модификатора g. При подставлении указанного шаблона
Код:
$text = preg_replace("#(?<=[$RusAll])([$RusX])(?=[$RusAll]{2})#ig","#\1$Hyphen#", $text);
на выходе полный бред с "#" и пропавшими буквами.

Оп. Скосипорил :D. G убарть ф топку он и так заменяет все вхождения, а второй параметр так "\\1$Hyphen" или так
PHP:
"\\1" . $Hyphen
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху