2014-02-26 23 views
1

我有一個.txt文件,其中包含數千個英語單詞的列表以及它們在烏爾都語中的含義。 文件結構如下。每行以一個單詞開頭,並以unicode字符翻譯。PHP的Unicode字符串提取 - 如何分割一個字符串,並根據第一個非字母字符的位置將其存儲到兩個變量?

dict.txt(編碼UTF-8)

Sony  سونی (sōnī) 
South Ossetia جنوبی اوسیتیا (janūbī osetiyā) 
flower (ur-Arab'کھلنا) (unicode'(kʰilnā)) 
fly اڑنا (uṛnā) 
fog کوہرا (m) (kuhrā) 
. 
. 

注:有字索尼,飛權沒有空格,霧等我加他們爲清楚起見

到目前爲止,我有做到了這一點..

$file = fopen("dict.txt",'r'); 
if ($file) { 
while($lines = fgets($file)){ 
    $word = ''; 
    $def = ' '; 
    //want to extract "word" and its "definition" from $lines 
    } 
} 
    fclose($file); 

現在我想文件的每一行分成兩個變量將它們存儲在數據庫$字和$ DEF將它們存儲在數據庫中以供進一步使用。

我厭倦了使用preg_match()和list()+ explode(),但我是一種新手,我的解決方案不工作。我也厭倦了搜索谷歌,但沒有找到滿意的答案。

是我想做的事情..

{

如果找到其他字母一個接着一個-Z/A-Z和空間打破刺痛; 店留在變量$名稱和$ DEF右側部分..

}

由於提前

回答

0

如果格式總是[english][urdu]([pronunciation]),這應該做的相當不錯:

preg_match('/^([\w\s]+)([\W\s]+)\((.+)\)$/', $line, $matches); 
echo "English: $matches[1], Urdu: $matches[2], pronunciation: $matches[3]"; 

[\w\s]+匹配「單詞和空格字符」,[\W\s]+是「非單詞和空格字符」(「單詞」表示AZ和像_這樣的幾個字符),並且在括號內爲.*剩下的就是es。見http://rubular.com/r/eHUQFczLah

0

如何:

$arr = array(
"Sony  سونی (sōnī)", 
"South Ossetia جنوبی اوسیتیا (janūbī osetiyā)", 
"flower (ur-Arab'کھلنا) (unicode'(kʰilnā))", 
"fly اڑنا (uṛnā)", 
"fog کوہرا (m) (kuhrā)" 
); 

foreach($arr as $val) { 
    $list = preg_split('/([\w\s]+)(.+)/', $val, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 
    print_r($list); 
} 

輸出:

Array 
(
    [0] => Sony  
    [1] => سونی (sōnī) 
) 
Array 
(
    [0] => South Ossetia 
    [1] => جنوبی اوسیتیا (janūbī osetiyā) 
) 
Array 
(
    [0] => flower 
    [1] => (ur-Arab'کھلنا) (unicode'(kʰilnā)) 
) 
Array 
(
    [0] => fly  
    [1] => اڑنا (uṛnā) 
) 
Array 
(
    [0] => fog  
    [1] => کوہرا (m) (kuhrā) 
) 
+0

感謝üv.much先生..我沒有考慮到的數據是文本文件,這樣我就可以複製粘貼一個PHP數組 –

+0

@AhtshamKhan:你可以在文件的每個記錄上用while循環代替foreach。我只是做了測試。 – Toto

相關問題