Как разделить предложение на английский кириллица и кириллица английский?

У меня есть образец текста английскими буквами кириллицы:

“No,” the  old  man  said.” But we have .Haven’t we?” Бале , -гуфт  -Аммо мо бовар дорем . Дуруст”?
“Yes ,”the boy said . Can I offer you a  beer on the  Terrace and then we’ll take the stuff home .

Албатта . Мехоҳӣ, ки дар каҳвахона  бароят оби ҷав  бигирам?  Баъд чизҳоро  ба хона  мебарем .

“Why not ?”  the  old man said . “  Between fishermen.”
Чаро  не ?! гуфт  пирамард .- Моҳигир моҳигириро метавонад  даъват кунад.

Как я могу получить пример результата из этого текста в массив:

$englishCyrillic = [
"No, the  old  man  said. But we have .Haven’t we?" => "Бале , -гуфт  -Аммо мо бовар дорем . Дуруст?",
"Yes ,the boy said . Can I offer you a  beer on the  Terrace and then we’ll take the stuff home." => "Албатта . Мехоҳӣ, ки дар каҳвахона  бароят оби ҷав  бигирам?  Баъд чизҳоро  ба хона  мебарем.",
"Why not ?  the  old man said . Between fishermen." => "Чаро  не ?! гуфт  пирамард .- Моҳигир моҳигириро метавонад  даъват кунад.",
];

А также у меня есть тип предложения на кириллице:

Куҷо дард мекунад?  Show me where it hurts?
Нафас гиред / Нафас нагиред.    Breath / Do not breath
Чуқуртар нафас гиред    Breathe deeply

Как получить пример результата из этого текста:

$cyrillicEnglish = [
"Куҷо дард мекунад?" => "Show me where it hurts?",
"Нафас гиред / Нафас нагиред." => "Breath / Do not breath",
"Чуқуртар нафас гиред" => "Breathe deeply",
];

Я устал от регулярных выражений, но мой код не может быть разделен по предложению и возвращать нужный мне результат

Поиск английских слов:

preg_match_all('/[\p{Latin}]+/u', $text, $matches);

Поиск кириллических слов:

preg_match_all('/[\p{Cyrillic}]+/u', $text, $matches);

1

Решение

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

Для второго формата вы можете использовать

preg_match('~(.*\p{Cyrillic}\S*)\h+(.+)~u', $s, $matches)

и создать массив:

array_combine($matches[1], $matches[2])

Увидеть демонстрация второго регулярного выражения

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector