7

Unicode 英数字型の文字列を固定長に分割する方法を探しています。例えば:

    992000199821376ジョン・スミス 20070603

配列は次のようになります。

Array (
 [0] => 99,
 [1] => 2,
 [2] => 00019982,
 [3] => 1376,
 [4] => "John Smith",
 [5] => 20070603
) 

配列データは次のように分割されます。

    Array[0] - アカウントの種類 - 2 文字の長さである必要があります。
    Array[1] - アカウントのステータス - 1 文字の長さである必要があります。
    Array[2] - アカウント ID - 8 文字の長さである必要があります。
    Array[3] - アカウント設定 - 4 文字の長さである必要があります。
    Array[4] - ユーザー名 - 20 文字の長さである必要があります。
    Array[5] - 参加日 - 8 文字の長さである必要があります。
4

4 に答える 4

4

または、pregを避けたい場合:

$string = '992000199821376John Smith          20070603';
$intervals = array(2, 1, 8, 4, 20, 8);

$start = 0;
$parts = array();

foreach ($intervals as $i)
{
   $parts[] = mb_substr($string, $start, $i);

   $start += $i;
}
于 2012-09-13T13:19:09.133 に答える
0

substr 関数を使用すると、これを非常に簡単に行うことができます。

$accountDetails = "992000199821376John Smith          20070603";
$accountArray = array(substr($accountDetails,0,2),substr($accountDetails,2,1),substr($accountDetails,3,8),substr($accountDetails,11,4),substr($accountDetails,15,20),substr($accountDetails,35,8));

その正規表現(akondによって提案されているように)以外は、おそらく行く方法です(そしてより柔軟です)。(これは代替オプションとしてまだ有効であると考えました)。

于 2012-09-13T13:16:50.237 に答える
0

Unicode 文字列を希望どおりに分割することはできません。

部品を無効にしないと無理です。一部のコード ポイントは目立たせることができません。たとえば、שׁ は 2 つのコード ポイント (UTF-8 と UTF-16 では 4 バイト) であり、未定義であるため分割できません。

Unicode を扱う場合、「文字」は非常にわかりにくい用語です。コード ポイント、グリフなどがあります。詳細については、http: //www.utf8everywhere.orgの「文字列の長さ」の部分を参照してください。

于 2012-09-13T21:21:38.087 に答える
0
    $s = '992000199821376Николай Шмидт       20070603';

    if (preg_match('~(.{2})(.{1})(.{8})(.{4})(.{20})(.{8})~u', $s, $match))
    {
        list (, $type, $status, $id, $settings, $name, $date) = $match;
    }
于 2012-09-13T13:03:37.957 に答える