我有以下带有进程列表的输出(字符串变量):
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?
谢谢。
try: [^'d]*('d+).*'n?
组 1 可以获取每行的每个第一个数字。
您可以使用
此模式:
preg_match_all('~^'S+'s+'K'd+~m', $subject, $matches);
print_r($matches);
'K
重置之前的所有比赛。
/^[^'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]+)
- 匹配从0
到9
重复 1 次或多次的数字的捕获组 -
/m
- 我们的修饰符 - 这意味着^
将匹配每一行的开头,而不是整个文本