如何通过传递单词将文本中的单词描述添加到数组中,添加到数组键中?

时间:2017-10-20 09:01:33

标签: php arrays regex text explode

我有一本书,其中有很多单词:

ОБАНДОМ آباندام маљ. обпайкар, нозукан- дом, латифбадан.
FБАФКАН آبافكن муњаррики обафкан, даст- гоњи обпошї.
БАНЉИР انجير آب обе, ки дар он анљири ќоќ
ва хушкро мељӯшонанд ва он хусусияти
табобатї дорад.
ӮББАДАЛ بدل آب муовизаи об, табдили об.
ТББАНД بند آب 1. он ки дар пеши об банд ё
дарѓот месозад. 2. банд, дарѓот.
ОББАР بر آب 1. он ки об мебарад, обкаш, маш- коб. 2. маљ. маъшуќ, ки тавассути њуснаш
обрўи ошиќи худро зери хавфи коҳиш
мегузорад. 3. тех. облўла, лўлаи обрасонї, ќубури обгузар.
ЗББАРДОР آببردار 1. обро ба худ гиранда, он
чи зиёд об талаб мекунад, обталаб; биринљи
оббардор. 2. ниг. обчинак.
ҚББАРДОРЇ آببرداري 1. обкашї, машкобї. 2.
об бардоштани чизе (мас., биринљ).
ҶББАРДОШТА برداشته آب рахнае, ки бо фишор
ё љараёни об ба амал омадааст, оббурда, об- шуста (мас., дар банди об ё замин).
ӢББАРО برا آب љои баромади об, љое, ки об аз
он љорї мешавад.
ЪББАЊО بها آب кит. музди об, пули об.
ӢББО اآب нидо, лањљ. изњори тааљљуб ва афсўс.
РББОЗ باز آب шиновар, ѓаввос, обдон, оббур.
ОББОЗИДОРЇ بازيداري آبоббозї доштан
(мас., кўдакро, беморро ва ѓ.)
ОББОЗЇ آببازي шиноварї, оббурї; оббозї кар- дан ба об даромадан ва шустушў кардан, шино кардан.
СББУР بر آب 1. ниг. оббоз. 2. бахши пеши поя- њои пулу купрукњо муќобили љараёни об, ки
нўгтез буда, мављњои обро таќсим карда, фишори обро бар сутуни пояњо суст мекунад.
ОББУРДА برده آب 1. љои рахна карда хокро
шуста бурдаи об, љои обшустаи дарѓот. 2.
љар, љарї, сой.
ҲББУРЇ بري آب обро бурида гузаштан, шиноварї.
ОБВАРЗ ورز آب обдон, оббоз, шиновар.
ДБВАРЗЇ ورزي آب оббозї, шиноварї.
УБГАЗ آبگز осебдида ва зарардида бар асари
муддати зиёд зери об мондан.
ОБГАРДИШ گردش آب 1. хамгашт (-и дарё). 2.
гирдоб. 3. таѓйири мусбат ва ё манфии таб- дили иќлим ба саломатї; нотобї бар асари
табдили иќлим. 4. кит. тезрафтор, хушраф- тор.

如您所见,您需要添加到数组键中的所有单词都是用大字母书写的。通过将这些单词传递给数组键,我想将这些单词的所有描述添加到数组中。我怎么能通过正则表达式来做到这一点?

近似结果如下:

$wordsDescription = array(
    "ОБАНДОМ" => "آباندام маљ. обпайкар, нозукан- дом, латифбадан.",
    "FБАФКАН" => "آبافكن муњаррики обафкан, даст- гоњи обпошї.",
    "БАНЉИР" => "نجير آب обе, ки дар он анљири ќоќ ва хушкро мељӯшонанд ва он хусусияти табобатї дорад.",
    "ӮББАДАЛ" => "بدل آب муовизаи об, табдили об.",
    "ТББАНД" => "بند آب 1. он ки дар пеши об банд ё дарѓот месозад. 2. банд, дарѓот.",
    "ОББАР" => "بر آب 1. он ки об мебарад, обкаш, маш- коб. 2. маљ. маъшуќ, ки тавассути њуснаш обрўи ошиќи худро зери хавфи коҳиш мегузорад. 3. тех. облўла, лўлаи брасонї, ќубури обгузар.",
    .................
    "ОБГАРДИШ" => "گردش آب 1. хамгашт (-и дарё). 2. гирдоб. 3. таѓйири мусбат ва ё манфии таб- дили иќлим ба саломатї; нотобї бар асари табдили иќлим. 4. кит. тезрафтор, хушраф- тор."
);

如果可能,那么第二个数组带有第二个结果

$wordsTranslate = array(
    "ОБАНДОМ" => "آباندام",
    "FБАФКАН" => "آبافكن",
    ....................,
    "ОБГАРДИШ" => "گردش آب"
);

2 个答案:

答案 0 :(得分:2)

您可以使用

描述字词
~^(\p{Lu}+)\h+(.*(?:\R(?!\p{Lu}+\h).*)*)~mu

请参阅regex demo

<强>详情

  • ^ - 一行开始(由于m修饰符)
  • (\p{Lu}+) - 一个或多个大写Unicode字母
  • \h+ - 一个或多个水平空格
  • (.*(?:\R(?!\p{Lu}+\h).*)*) - 第2组:
    • .* - 其余部分
    • (?:\R(?!\p{Lu}+\h).*)* - 0或更多序列
      • \R(?!\p{Lu}+\h) - 换行符序列后面没有1+大写Unicode字母和1个水平空格
      • .* - 其余部分。

请参阅PHP demo

$s = "ОБАНДОМ آباندام маљ. обпайкар, нозукан- дом, латифбадан.\nFБАФКАН آبافكن муњаррики обафкан, даст- гоњи обпошї.\nБАНЉИР انجير آب обе, ки дар он анљири ќоќ\nва хушкро мељӯшонанд ва он хусусияти\nтабобатї дорад.\nӮББАДАЛ بدل آب муовизаи об, табдили об.";
$re = '~^(\p{Lu}+)\h+(.*(?:\R(?!\p{Lu}+\h).*)*)~mu';
preg_match_all($re, $s, $m);
$result = array_combine($m[1], $m[2]);
print_r($result);

输出:

Array
(
    [ОБАНДОМ] => آباندام маљ. обпайкар, нозукан- дом, латифбадан.
    [FБАФКАН] => آبافكن муњаррики обафкан, даст- гоњи обпошї.
    [БАНЉИР] => انجير آب обе, ки дар он анљири ќоќ
ва хушкро мељӯшонанд ва он хусусияти
табобатї дорад.
    [ӮББАДАЛ] => بدل آب муовизаи об, табдили об.
)

你可以&#34;缩小&#34;换行使用

$result = array_combine($m[1], preg_replace('~\s*\R\s*~u', ' ', $m[2]));

another PHP demo\s*\R\s*模式匹配任何0+空格,然后是强制性换行序列,后跟任意0+空格,并用常规空格替换匹配。

通过从描述值中删除所有非阿拉伯语字符,可以轻松构建第二个数组:

$second = array_combine($m[1], preg_replace('~\P{Arabic}+~u', '', $m[2]));
print_r($second);

请参阅this PHP demo

答案 1 :(得分:0)

您可以在PHP脚本中尝试此正则表达式\b([Ѐ-ЯҐ-ҲFӮҶӢ]+)(.+?)(?:\n(?=[Ѐ-ЯҐ-ҲFӮҶӢ])|$)

$str = "ОБАНДОМ آباندام маљ. обпайкар, нозукан- дом, латифбадан.
FБАФКАН آبافكن муњаррики обафкан, даст- гоњи обпошї.
БАНЉИР انجير آب обе, ки дар он анљири ќоќ
ва хушкро мељӯшонанд ва он хусусияти
табобатї дорад.
ӮББАДАЛ بدل آب муовизаи об, табдили об.";

preg_match_all('/\b([Ѐ-ЯҐ-ҲFӮҶӢ]+)(.+?)(?:\n(?=[Ѐ-ЯҐ-ҲFӮҶӢ])|$)/us', 
               $str, $matches, PREG_SET_ORDER, 0);

foreach ($matches as $m)
  $dict[$m[1]] = $m[2];

var_dump($dict);