0

データの文字列があります: 数字、スペース、そして文字、数字、特殊文字、およびスペースを含むことができる単語です。最初の数字のみを分離し、次に単語のみを分離して、データをテーブルに再レンダリングできるようにする必要があります。

1 foo
2   ba_r
3  foo bar
4   fo-o

編集: "^[0-9]+[" "]" でこれを試みていましたが、うまくいきません。

4

2 に答える 2

3

この正規表現を使用して、各行をキャプチャできます。

/^(\d+)\s+(.*)$/m

この正規表現は各行から始まり、1 つ以上の数字をキャプチャし、1 つ以上の空白文字に一致してから、行末まですべてをキャプチャします。

次に、 を使用してpreg_match_all()、必要なデータを取得できます。

preg_match_all( '/^(\d+)\s+(.*)$/m', $input, $matches, PREG_SET_ORDER);

$matches次に、次のように、配列からデータを解析できます。

$data = array();
foreach( $matches as $match) {
    list( , $num, $word) = $match;
    $data[] = array( $num, $word);
    // Or: $data[$num] = $word;
}

Aprint_r( $data); が出力します:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => foo
        )

    [1] => Array
        (
            [0] => 2
            [1] => ba_r
        )

    [2] => Array
        (
            [0] => 3
            [1] => foo bar
        )

    [3] => Array
        (
            [0] => 4
            [1] => fo-o
        )

)
于 2013-06-12T15:00:44.653 に答える
2
$str = <<<body
1 foo
2   ba_r
3  foo bar
4   fo-o
body;

preg_match_all('/(?P<numbers>\d+) +(?P<words>.+)/', $str, $matches);
print_r(array_combine($matches['numbers'],$matches['words']));

出力

Array
(
    [1] => foo
    [2] => ba_r
    [3] => foo bar
    [4] => fo-o
)
于 2013-06-12T15:01:28.517 に答える