我有以下带有进程列表的输出(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如何使用regex (PHP)提取所有PID?
谢谢。
发布于 2013-10-23 14:54:25
您可以使用以下模式:
preg_match_all('~^\S+\s+\K\d+~m', $subject, $matches);
print_r($matches);\K重置之前的所有匹配。
发布于 2013-10-23 15:22:20
尝试:[^\d]*(\d+).*\n?
第一组可以得到每一行的每一个第一个数字。
发布于 2013-10-23 14:57:26
/^[^\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
)
*/
}
?>Regex尸检
^ -字符串匹配必须从这里开始(因为我们使用了/m修饰符,这意味着每一行必须以该字符后面的内容开始)[^\s]+ -任何不是空格/制表符/换行符重复1次或多次的字符\s+ -任何重复1次或多次的空格/制表符/换行符的字符([0-9]+) -一个捕获组,将从0到9的数字重复重复1次或多次/m -我们的修饰符-这意味着^将匹配每一行的开头,而不是整个文本。https://stackoverflow.com/questions/19545120
复制相似问题