簡體   English   中英

每次我在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多種hiraganas,katakanas和kanjis及其各自的romajis(它們是您發音時發出的聲音)插入到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將是您的絕佳資源,請查看explode()函數

嘗試

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個元素的數組,最后一個元素應如下所示:

Array
(
    [0] => ryu リョ  (ja)    
    [1] => ryu
    [2] => リョ  (ja)
    [3] => (ja)
)

我認為這是不言而喻的,如果沒有讓我知道。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM