【问题标题】:How to split a sentence in English Cyrillic and Cyrillic English?如何拆分西里尔英语和西里尔英语的句子?
【发布时间】:2018-06-20 12:14:06
【问题描述】:

我有英文西里尔字母的示例文本:

“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);

【问题讨论】:

  • 第一种格式可以逐行读取,奇数是英文,偶数是西里尔文。不需要正则表达式。对于第二种格式,您可能会使用preg_match('~(.*\p{Cyrillic}\S*)\h+(.+)~u', $s, $matches) => array_combine($matches[1], $matches[2])
  • 此代码对我不起作用@Wiktor Stribiżew。您可以将示例代码上传到3v4i uploader吗?
  • @Wiktor Stribiżew for first format 我有另一种类型的文本,其中文本上没有 \n\r 行。如何使用正则表达式查找英语 => 西里尔文句子作为第一种格式?
  • 现在我更新了第一个文本格式@Wikto rStribiżew

标签: php regex string split cyrillic


【解决方案1】:

第一种格式的字符串可以逐行读取,只需将奇数添加为英文,将偶数添加为西里尔文。不需要正则表达式。

对于第二种格式,您可以使用

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

然后创建数组:

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

second regex demo

【讨论】:

    猜你喜欢
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多