Php 在列位置拆分字符串
我正在使用Php 在列位置拆分字符串,php,regex,ps,Php,Regex,Ps,我正在使用 ps -l -u user 获取给定用户正在运行的进程 现在,当我想用PHP将信息拆分成数组时,我遇到了麻烦,因为ps输出数据供人们阅读,而不需要固定的分隔符。所以不能将空格或制表符作为正则表达式拆分 到目前为止,我只能通过字符位置检测列 在php中,有没有任何方法可以在特定位置将字符串拆分为数组?比如: $array=split_columns($string, $positions=array(1, 10, 14)) 在PHP preg_split中,在位置1、10和14处将
ps -l -u user
获取给定用户正在运行的进程
现在,当我想用PHP将信息拆分成数组时,我遇到了麻烦,因为ps
输出数据供人们阅读,而不需要固定的分隔符。所以不能将空格或制表符作为正则表达式拆分
到目前为止,我只能通过字符位置检测列
在php中,有没有任何方法可以在特定位置将字符串拆分为数组?比如:
$array=split_columns($string, $positions=array(1, 10, 14))
在PHP preg_split中,在位置1、10和14处将字符串切成碎片将对您有所帮助。您可以按多个空格分隔,例如:
<?
$text = '501 309 1 4004 0 4 0 2480080 10092 - S 0 ?? 0:36.77 /usr/sbin/cfpref
501 310 1 40004004 0 37 0 2498132 33588 - S 0 ?? 0:23.86 /usr/libexec/Use
501 312 1 4004 0 37 0 2471032 8008 - S 0 ?? 19:06.48 /usr/sbin/distno';
$split = preg_split ( '/\s+/', $text);
print_r($split);
我决定尝试一种带有动态模式构建的正则表达式方法。不确定这是最好的方式,但您可以尝试一下:
function split_columns ($string, $indices) {
$pat = "";
foreach ($indices as $key => $id) {
if ($key==0) {
$pat .= "(.{" . $id . "})";
} else if ($key<count($indices)) {
$pat .= "(.{" . ($id-$indices[$key-1]) . "})";
}
}
$pats = '~^'.$pat.'(.*)$~m';
preg_match_all($pats, $string, $arr);
return array_slice($arr, 1);
}
$string = "11234567891234567\n11234567891234567"; // 1: '1', 2: '123456789', 3: '1234', 4: '567'
print_r (split_columns($string, $positions=array(1, 10, 14)));
函数拆分_列($string,$index){
$pat=“”;
foreach($索引为$key=>$id){
如果($key==0){
$pat.=“(.{.$id.})”;
}如果($key我修改了Wiktor的解决方案,因为我不需要那么多信息
function split_columns ($string, $indices) {
$pat = "";
foreach ($indices as $key => $id) {
if ($key==0) {
$pat .= "(.{" . $id . "})";
} else if ($key<count($indices)) {
$pat .= "(.{" . ($id-$indices[$key-1]) . "})";
}
}
$pats = '~^'.$pat.'(.*)$~m';
preg_match_all($pats, $string, $arr, PREG_SET_ORDER);
$arr=$arr[0];
return array_slice($arr, 1);
}
函数拆分_列($string,$index){
$pat=“”;
foreach($索引为$key=>$id){
如果($key==0){
$pat.=“(.{.$id.})”;
}else如果($keypreg_match_all('~^(.{10})(.{4})~m',$s,$matches)
?awk在这里很有用,我已经尝试过了——当然。重点是ps在用空格拆分时不会给出一致性结果。您可以在一行中得到12个数组元素,在下一行中得到15个。例如,取决于ps中列出的命令是否也包含空格。然后您可以使用此处的答案:并创建一种适合您的格式needs我会看一看的。谢谢。太棒了。我对它做了一些修改以满足我的需要。我不需要多维数组。