preg_match_all 字符串中的进程 ID
preg_match_all on process ids in string
我正在尝试从字符串中获取某些 ID,但无法正常工作。我在结果中得到了我不期望的值。
这是我的:
<?php
$grep = ' 7027 ? S 0:00 nginx: worker process
7632 ? S 0:00 sh -c ps ax | grep nginx
7634 ? S 0:00 grep nginx
16117 ? Ss 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf';
if ( preg_match_all('~([0-9]+) \?(.*?)nginx:~si', $grep, $matches) )
{
echo '<pre>';
print_r($matches);
echo '</pre>';
}
我在这里期待的是:~([0-9]+) \?(.*?)nginx:
是它会匹配这两行:
7027 ? S 0:00 nginx: worker process
16117 ? Ss 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf';
我特别关注他们的进程 ID,在这种情况下:7027
和 16117
。
但我得到的是:7027
和 7632
。
我的正则表达式应该如何获取我想要的数据?
s
修饰符强制 .
匹配换行符序列。您需要将其删除,然后您可以将正则表达式简化为 return 您之后的进程 ID。
preg_match_all('~(\d+).*nginx:~i', $grep, $matches);
print_r($matches[1]);
输出
Array
(
[0] => 7027
[1] => 16117
)
我正在尝试从字符串中获取某些 ID,但无法正常工作。我在结果中得到了我不期望的值。
这是我的:
<?php
$grep = ' 7027 ? S 0:00 nginx: worker process
7632 ? S 0:00 sh -c ps ax | grep nginx
7634 ? S 0:00 grep nginx
16117 ? Ss 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf';
if ( preg_match_all('~([0-9]+) \?(.*?)nginx:~si', $grep, $matches) )
{
echo '<pre>';
print_r($matches);
echo '</pre>';
}
我在这里期待的是:~([0-9]+) \?(.*?)nginx:
是它会匹配这两行:
7027 ? S 0:00 nginx: worker process
16117 ? Ss 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf';
我特别关注他们的进程 ID,在这种情况下:7027
和 16117
。
但我得到的是:7027
和 7632
。
我的正则表达式应该如何获取我想要的数据?
s
修饰符强制 .
匹配换行符序列。您需要将其删除,然后您可以将正则表达式简化为 return 您之后的进程 ID。
preg_match_all('~(\d+).*nginx:~i', $grep, $matches);
print_r($matches[1]);
输出
Array
(
[0] => 7027
[1] => 16117
)