0

いくつかの正規表現を理解するのに助けが必要です。dig コマンドを実行していて、その出力を使用する必要があります。私はそれを解析し、php を使用して配列としてきれいに配置する必要があります。

dig 出力は次のようになります。

m0.ttw.mydomain.tel.    60      IN      TXT     ".tkw" "1" "20090624-183342" "Some text here1"
m0.ttw.mydomain.tel.    60      IN      TXT     ".tkw" "1" "20090624-183341" "Some text here2"

私はこれを取得したい:

Array
(
    [0] => Array
        (
            [0] => .tkw
            [1] => 1
            [2] => 20090624-183342
            [3] => Some text here1
        )
    [1] => Array
...
)

二重引用符内の内容が必要です。dig の出力を 1 行ずつ解析することはできますが、すべてに対して正規表現パターン マッチングを実行した方が速いと思います...

考え?

4

4 に答える 4

2

PHP の正規表現についてはよくわかりませんが、Perl では RE は単純です。

my $c = 0;
print <<EOF;
Array
(
EOF
foreach (<STDIN>) {
    if (/[^"]*"([^"]*)"\s+"([^"]*)"\s+"([^"]*)"\s+"([^"]*)"/) {
        print <<EOF;
    [$c] => Array
        (
            [0] = $1
            [1] = $2
            [2] = $3
            [3] = $4
        )
EOF
        $c++;
    }
}

print <<EOF;
)
EOF

これにはいくつかの制限があります。

  • 引用符内のテキストに引用符をエスケープできる場合は機能しません (例: \")
  • 引用符で囲まれた 4 つの値のみをサポートするようにハード コードされています。
于 2009-06-24T22:02:04.140 に答える
0

コード:

<?php
    $str = 'm0.ttw.mydomain.tel.    60      IN      TXT     ".tkw" "1" "20090624-183342" "Some text here1"
m0.ttw.mydomain.tel.    60      IN      TXT     ".tkw" "1" "20090624-183341" "Some text here2"';

    header('Content-Type: text/plain');
    $matches = array();
    preg_match_all('/(".*").*(".*").*(".*").*(".*")/U', $str, $matches, PREG_SET_ORDER);
    print_r($matches);
?>

出力:

配列
((
    [0]=>配列
        ((
            [0] => ".tkw" "1""20090624-183342""ここにいくつかのテキスト1"
            [1] => ".tkw"
            [2] => "1"
            [3] => "20090624-183342"
            [4]=>「ここにいくつかのテキスト1」
        )。

    [1]=>配列
        ((
            [0] => ".tkw" "1""20090624-183341""ここにいくつかのテキスト2"
            [1] => ".tkw"
            [2] => "1"
            [3] => "20090624-183341"
            [4]=>「ここにいくつかのテキスト2」
        )。

)。
于 2009-06-24T22:17:28.133 に答える
0

これは一行で近づきます

preg_match_all( '/"([^"]+)"\s*"([^"]+)"\s*"([^"]+)"\s*"([^"]+)"/', $text, $matches, PREG_SET_ORDER );

print_r( $matches );

ただし、preg_match *関数がどのように機能するかにより、完全一致は各一致グループのインデックス0に含まれます。本当に必要な場合は、これを修正できます。

array_walk( $matches, create_function( '&$array', 'array_shift( $array );return $array;' ) );
于 2009-06-24T22:18:25.090 に答える