每次我在PHP中进行正则表达式拆分时,PHP返回的数组中的第一个和最后一个字符串都是空的


Every time I do a regular expression splitting in PHP the first and last string in the array PHP returns appears empty

我正在做一个学习日语的平台,我有超过2000个平假名、片假名和汉字以及它们各自的罗马字母(它们是你发音时发出的声音),我想把它们插入MySQL数据库。但问题是我把它们放在这样的字符串中(这只是片假名,想象一下现在超过2000个亚洲字符!):

    $string = "a    ア   ka  カ   sa  サ   ta  タ   na  ナ
    i   イ   ki  キ   shi シ   chi チ   ni  ニ
    u   ウ   ku  ク   su  ス   tsu ツ   nu  ヌ
    e   エ   ke  ケ   se  セ   te  テ   ne  ネ
    o   オ   ko  コ   so  ソ   to  ト   no  ノ
    ha  ハ   ma  マ   ya  ヤ   ra  ラ   wa  ワ
    hi  ヒ   mi  ミ           ri  リ   (wi)    ヰ
    fu  フ   mu  ム   yu  ユ   ru  ル   n   ン
    he  ヘ   me  メ           re  レ   (we)    ヱ
    ho  ホ   mo  モ   yo  ヨ   ro  ロ   (w)o    ヲ   ga  ガ   za  ザ   da  ダ   ba  バ   pa  パ
    gi  ギ   ji  ジ   ji  ヂ   bi  ビ   pi  ピ
    gu  グ   zu  ズ   zu  ヅ   bu  ブ   pu  プ
    ge  ゲ   ze  ゼ   de  デ   be  ベ   pe  ペ
    go  ゴ   zo  ゾ   do  ド   bo  ボ   po  ポ
    kya キャ  sha シャ  cha チャ  hya ヒャ  pya ピャ
    kyu キュ  shu シュ  chu チュ  hyu ヒュ  pyu ピュ
    kyo キョ  sho ショ  cho チョ  hyo ヒョ  pyo ピョ
    gya ギャ  ja  ジャ  nya ニャ  bya ビャ  mya ミャ
    gya ギュ  ju  ジュ  nyu ニュ  byu ビュ  my  ミュ
    gyo ギョ  jo  ジョ  nyo ニョ  byo ビョ  myo ミョ
    rya リャ  ryu リュ  ryu リョ  (ja)    ヂャ  (ju)    ヂュ";

到目前为止,我可以将它们分为亚洲字符和罗马字符,但它也可以分割表格,并且在数组的第一部分和最后一部分有空白字符。

您应该考虑将字符串展开为一个数组,使用制表符作为分隔符。一旦你有了数组,你就可以遍历它,分离出字符。我就是这么开始的

php.net将是一个很好的资源,请查看explosion()函数

Try

preg_match_all('/('S+)'s/+('S+)'s*/', $string, $matches, PREG_SET_ORDER);
print_r($matches);

搜索模式:字母、空格、字母、空格,然后对整个字符串重复此模式。

我不确定你想要什么样的输出从你的正则表达式,但如果你使用这个,你会得到一个2D数组与每个子数组包含两个元素(每次它读取两个单词它添加一个新的数组到主数组为接下来的两个)。它还去掉了jaju的括号。如果你需要保留这些,请告诉我。它也非常脆弱(如果$string中有奇数个单词,它将导致PHP E_NOTICE警告)。如果您需要更改,请告诉我:

$arr = array();
preg_match_all('/(?<=^|'s)'S+(?='s|$)/mu', $string, $arr);
$count = (int)(count($arr[0])/2);
for($i = 0; $i < $count; $i++)
    $arr[0][$i] = array($arr[0][$i*2], $arr[0][$i*2+1]);
$arr = array_slice($arr[0], 0, $count);
echo $arr[0][0].': '.$arr[0][1];      // Outputs "a: ア"
echo $arr[107][0].': '.$arr[107][1];  // Outputs "ju: ヂュ"

试试这个:

<?php
    $string =
   "a    ア   ka  カ   sa  サ   ta  タ   na  ナ
    ...";
// |<-----------------------GRP#0------------------------>| // |GRP#01| |<--------------GRP#02-------------->| // |<-GRP#03->| // romans spaces non-spaces ignored-spaces '('romans')' opt-sapces preg_match_all('/([a-z]+)[ 'n'r't]+([^ 'n'r't]+(?:[ 'n'r't]+)(([a-z]+))?)[ 'n'r't]*/', $string, $matches, PREG_SET_ORDER); print_r($matches);

你应该得到一个包含103个元素的数组,最后一个元素应该是这样的:

<>之前的数组([0] =比;柳(子)[1] =比;ryu[2] =比;(ja)[3] =比;(是的)) 之前

我认为这是不言自明的,如果不让我知道。