2012-02-13 12 views
0

Linuxのdfコマンドの出力と一致するように、PHPのpreg_match関数で次の正規表現を使用しています。正規表現の読みやすさを簡素化するために、defineマクロを使用しました。知らない人のためにdf出力の正規表現が正しく動作しない

define("MATCH_DF", 
    "/^(?P<filesystem>[0-9a-z\/]+)\s+" . 
    "(?P<blocks>[0-9]+)\s+" . 
    "(?P<used>[0-9]+)\s+" . 
    "(?P<avail>[0-9]+)\s+" . 
    "(?P<percent>[0-9]+%)\s+" . 
    "(?P<mount>[0-9a-zA-Z\/]+)\s+$/"); 

dfコマンドラインの出力は次のようになります...

Filesystem  1K-blocks  Used Available Use% Mounted on 
/dev/sda2  236520176 2863468 221642116 2%/

誰もが、私はここに欠けているものを私に伝えることができますか?なぜこれは機能しないのですか?問題を、正規表現の中にあるものに絞り込んだ。

+1

'preg_match()'はどのような出力を出力しますか? –

答えて

4

文字列の最後には空白がありますが、その中には空白がありません。 +の量指定子を*と交換して、オプションにするか、すべて一緒に削除することができます。

define("MATCH_DF", 
    "/^(?P<filesystem>[\da-z\/]+)\s+" . 
    "(?P<blocks>\d+)\s+" . 
    "(?P<used>\d+)\s+" . 
    "(?P<avail>\d+)\s+" . 
    "(?P<percent>\d+%)\s+" . 
    "(?P<mount>[\da-zA-Z\/]+)$/"); 

CodePad ...この正規表現を試してみてください。

[0-9]\dに交換しました。

あなたは

$matches = array_diff_key($matches, array_values($matches)); 

CodePad ...数値の一致を破棄し、単に名前のキャプチャグループを維持したい場合。

+0

+1鷲の目のため –

+0

@マイケル私はそれが[映画](http://www.imdb.com/title/tt1059786/)よりもいいと思う。 – alex

+0

ありがとう!私はそれを12分まっすぐに見て、私は最後にスペースマッチングを残していたことに気付かなかった。 –

関連する問題