0

大量のデータを処理しており、文字列 "INFO:" を含むすべての行を返そうとしています。興味のあるデータを返すパターンを取得することができましたが、この正規表現パターンを改善して、一致する文字列 (および可能であれば空白) を省略する方法を知りたかったので、関心のある実際のデータのみが返されること。

$pattern = "/^.*INFO:.*\$/m";
preg_match_all($pattern, $content, $matches);

INFO:   framerate             25.00
INFO:   width                 480.00
INFO:   height                360.00
INFO:   audioinputvolume      75.00
INFO:   audiocodecid          mp4a
INFO:   audiodatarate         48.00
4

3 に答える 3

2
preg_match_all('/^INFO:\s+([^\s]+)\s+([^\s]+)$/ms', $content, $matches);

戻り値:

Array
(
    [0] => Array
        (
            [0] => INFO:   framerate             25.00
            [1] => INFO:   width                 480.00
            [2] => INFO:   height                360.00
            [3] => INFO:   audioinputvolume      75.00
            [4] => INFO:   audiocodecid          mp4a
            [5] => INFO:   audiodatarate         48.00
        )

    [1] => Array
        (
            [0] => framerate
            [1] => width
            [2] => height
            [3] => audioinputvolume
            [4] => audiocodecid
            [5] => audiodatarate
        )

    [2] => Array
        (
            [0] => 25.00
            [1] => 480.00
            [2] => 360.00
            [3] => 75.00
            [4] => mp4a
            [5] => 48.00
        )

)

このように、どちらのフィールドにもスペースを含めることはできないことに注意してください。

于 2012-05-11T20:35:37.363 に答える
1
$pattern = "/INFO:\s+(.*?)\s+(.*?)(\s|$)/m";

これでうまくいくはずです。括弧内に一致したものは、$matches[1] と $matches[2] の要素として表示されます

これが出力するものは次のとおりです。

Array
(
[0] => Array
    (
        [0] => INFO:   framerate             25.00

        [1] => INFO:   width                 480.00

        [2] => INFO:   height                360.00

        [3] => INFO:   audioinputvolume      75.00

        [4] => INFO:   audiocodecid          mp4a

        [5] => INFO:   audiodatarate         48.00
    )

[1] => Array
    (
        [0] => framerate
        [1] => width
        [2] => height
        [3] => audioinputvolume
        [4] => audiocodecid
        [5] => audiodatarate
    )

[2] => Array
    (
        [0] => 25.00
        [1] => 480.00
        [2] => 360.00
        [3] => 75.00
        [4] => mp4a
        [5] => 48.00
    )

[3] => Array
    (
        [0] => 

        [1] => 

        [2] => 

        [3] => 

        [4] => 

        [5] => 
    )

)

| を使用するために括弧を使用したため、すべての空白/行末文字の 3 番目の配列があります。演算子を使用して、空白またはテキストの末尾を一致させることができます。

于 2012-05-11T20:34:26.100 に答える
0

マッチングに関心のあるグループをサブパターンに入れます ( )

あなたの場合は次のようになると思います:

$pattern = "/^.*INFO:(.*)\$/m";

を使用して、括弧内の内容を確認できます。$matches[1][$match]

于 2012-05-11T20:34:41.403 に答える