如何用正则表达式获得每行的第二个单词?

时间:2013-10-23 14:51:13

标签: php regex

我有以下输出(字符串变量)和进程列表:

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?

感谢。

3 个答案:

答案 0 :(得分:3)

尝试:[^\d]*(\d+).*\n?

第1组可以获得每一行的每个第一位数字。

答案 1 :(得分:2)

您可以使用此模式:

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

\K重置之前的所有匹配。

答案 2 :(得分: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 DEMO

正则表达式尸检

  • ^ - 字符串匹配必须从这里开始(因为我们使用/m修饰符,这意味着每一行必须从此字符后面的内容开始) < / LI>
  • [^\s]+ - 任何不是空格/制表符/换行符的字符重复一次或多次
  • \s+ - 任何空格/制表符/换行符重复1次或以上的字符
  • ([0-9]+) - 与重复1次或更多次09的数字匹配的捕获组
  • /m - 我们的修饰符 - 这意味着^将匹配每一行的开头,而不是整个文本