0

プロセス リストを含む次の出力 (文字列変数) があります。

chrome.exe                    1680 RDP-Tcp#0                  1    104,552 K
chrome.exe                    8944 RDP-Tcp#0                  1    133,680 K
csrss.exe                     8880 Console                   19      3,796 K
winlogon.exe                  6728 Console                   19      4,484 K
LogonUI.exe                   9024 Console                   19     19,552 K
dwm.exe                      11476 Console                   19     19,916 K
rdpclip.exe                   8152 RDP-Tcp#0                  1      8,240 K

正規表現 (PHP) を使用してすべての PID を抽出するにはどうすればよいですか?

ありがとう。

4

3 に答える 3

3

試す:[^\d]*(\d+).*\n?

グループ 1 は、各行の最初の桁をすべて取得できます。

于 2013-10-23T15:22:20.983 に答える
2

/^[^\s]+\s+([0-9]+)/m正常に動作するはずです:

<?php
    $string = "
chrome.exe                    1680 RDP-Tcp#0                  1    104,552 K
chrome.exe                    8944 RDP-Tcp#0                  1    133,680 K
csrss.exe                     8880 Console                   19      3,796 K
winlogon.exe                  6728 Console                   19      4,484 K
LogonUI.exe                   9024 Console                   19     19,552 K
dwm.exe                      11476 Console                   19     19,916 K
rdpclip.exe                   8152 RDP-Tcp#0                  1      8,240 K
    ";

    if (preg_match_all("/^[^\s]+\s+([0-9]+)/m", $string, $matches)) {
        print_r($matches[1]);
        /*
            Array
            (
                [0] => 1680
                [1] => 8944
                [2] => 8880
                [3] => 6728
                [4] => 9024
                [5] => 11476
                [6] => 8152
            )
        */
    }
?>

PHPデモ

正規表現の剖検:

  • ^-文字列の一致はここから開始する必要があります (/m修飾子を使用するため、これは、すべての行がこの文字の後に来るものから開始する必要があることを意味します)
  • [^\s]+-スペース/タブ/改行以外の任意の文字が 1 回以上繰り返される
  • \s+- 1回以上繰り返されるスペース/タブ/改行である任意の文字
  • ([0-9]+)-からまでの数字が1 回以上繰り返されるキャプチャ グループ09
  • /m-当社の修飾子 - これは^、テキスト全体ではなく、すべての行の先頭に一致することを意味します
于 2013-10-23T14:57:26.067 に答える
2

次のパターンを使用できます。

preg_match_all('~^\S+\s+\K\d+~m', $subject, $matches);
print_r($matches);

\K前にすべての試合をリセットします。

于 2013-10-23T14:54:25.790 に答える