首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用regex在每行上得到第二个单词?

如何用regex在每行上得到第二个单词?
EN

Stack Overflow用户
提问于 2013-10-23 14:51:13
回答 3查看 3.1K关注 0票数 0

我有以下带有进程列表的输出(string变量):

代码语言:javascript
复制
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?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-23 14:54:25

您可以使用以下模式:

代码语言:javascript
复制
preg_match_all('~^\S+\s+\K\d+~m', $subject, $matches);
print_r($matches);

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

票数 2
EN

Stack Overflow用户

发布于 2013-10-23 15:22:20

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

第一组可以得到每一行的每一个第一个数字。

票数 3
EN

Stack Overflow用户

发布于 2013-10-23 14:57:26

/^[^\s]+\s+([0-9]+)/m应该工作得很好:

代码语言:javascript
复制
<?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

Regex尸检

  • ^ -字符串匹配必须从这里开始(因为我们使用了/m修饰符,这意味着每一行必须以该字符后面的内容开始)
  • [^\s]+ -任何不是空格/制表符/换行符重复1次或多次的字符
  • \s+ -任何重复1次或多次的空格/制表符/换行符的字符
  • ([0-9]+) -一个捕获组,将从09的数字重复重复1次或多次
  • /m -我们的修饰符-这意味着^将匹配每一行的开头,而不是整个文本。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19545120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档