我正在做一个学习日语的平台,我有超过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数组与每个子数组包含两个元素(每次它读取两个单词它添加一个新的数组到主数组为接下来的两个)。它还去掉了ja
和ju
的括号。如果你需要保留这些,请告诉我。它也非常脆弱(如果$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] =比;(是的)) 之前我认为这是不言自明的,如果不让我知道。