php - 字符串修剪

时间:2011-06-28 21:11:41

标签: php string explode

请帮我解决这个问题。

$str = "col_1          col_2  col_3
row1 row2 row3
row12 row22        row33";

$arr = explode("\n", $str);

foreach($arr as $line)
{
   $temp_arr = explode(WHAT HERE, $line); 
}

如何将每一行分解为数组? 我想要$temp_arr[0] = col_1$temp_arr[1] = col2$temp_arr[2] = col_3 下一行将有$temp_arr[0] = row1$temp_arr[1] = row2

你们真棒。它适用于我的例子,但它不适用于我的真正问题。我导出windows xp进程并想要爆炸它们。

Caption              CommandLine                                                                                                                                                                                                                                                                   ProcessId  
System Idle Process                                                                                                                                                                                                                                                                                0          
System                                                                                                                                                                                                                                                                                             4          
smss.exe             \SystemRoot\System32\smss.exe                                                                                                                                                                                                                                                 604        
avgrsx.exe           C:\PROGRA~1\AVG\AVG10\avgrsx.exe /restart /boot                                                                                                                                                                                                                               692        
csrss.exe            C:\WINDOWS\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16  780        
winlogon.exe         winlogon.exe                                                                                                                                                                                                                                                                  820        
services.exe         C:\WINDOWS\system32\services.exe                                                                                                                                                                                                                                              880        
lsass.exe            C:\WINDOWS\system32\lsass.exe                                                                                                                                                                                                                                                 892        
nvsvc32.exe          C:\WINDOWS\system32\nvsvc32.exe                                                                                                                                                                                                                                               1052       
svchost.exe          C:\WINDOWS\system32\svchost -k DcomLaunch                                                                                                                                                                                                                                     1168       
svchost.exe          C:\WINDOWS\system32\svchost -k rpcss                                                                                                                                                                                                                                          1240       
svchost.exe          C:\WINDOWS\System32\svchost.exe -k netsvcs                                                                                                                                                                                                                                    1328       
svchost.exe          C:\WINDOWS\system32\svchost.exe -k NetworkService                                                                                                                                                                                                                             1404       
svchost.exe          C:\WINDOWS\system32\svchost.exe -k LocalService                                                                                                                                                                                                                               1520       
spoolsv.exe          C:\WINDOWS\system32\spoolsv.exe                                                                                                                                                                                                                                               1664       
explorer.exe         C:\WINDOWS\Explorer.EXE                                                                                                                                                                                                                                                       1956       
jqs.exe              "C:\Program Files\Java\jre6\bin\jqs.exe" -service -config "C:\Program Files\Java\jre6\lib\deploy\jqs\jqs.conf"                                                                                                                                                                460        
avgtray.exe          "C:\Program Files\AVG\AVG10\avgtray.exe"                                                                                                                                                                                                                                      1156       
rundll32.exe         "C:\WINDOWS\system32\RUNDLL32.EXE" C:\WINDOWS\system32\NvMcTray.dll,NvTaskbarInit                                                                                                                                                                                             1204       
alg.exe              C:\WINDOWS\System32\alg.exe                                                                                                                                                                                                                                                   1376       
AVGIDSMonitor.exe    "C:\Program Files\AVG\AVG10\Identity Protection\agent\bin\avgidsmonitor.exe"                                                                                                                                                                                                  660        
iexplore.exe         "C:\Program Files\Internet Explorer\iexplore.exe"                                                                                                                                                                                                                             620        
OUTLOOK.EXE          "C:\Program Files\Microsoft Office\Office12\OUTLOOK.EXE"  /recycle                                                                                                                                                                                                            1884       
SQLyog.exe           "C:\Program Files\SQLyog\SQLyog.exe"                                                                                                                                                                                                                                          2596       
UniKeyNT.exe         "C:\Program Files\unikey40RC2-1101-win32\UniKeyNT.exe"                                                                                                                                                                                                                        964        
avgcsrvx.exe         C:\Program Files\AVG\AVG10\avgcsrvx.exe /pipeName=4f758821-d931-4842-ae08-b81fe89b843a /coreSdkOptions=0 /binaryPath="C:\Program Files\AVG\AVG10\" /registryPath="SYSTEM\CurrentControlSet\Services\Avg\Avg10"                                                                3788       
svchost.exe          C:\WINDOWS\system32\svchost.exe -k imgsvc                                                                                                                                                                                                                                     3604       
mstsc.exe            "C:\WINDOWS\system32\mstsc.exe"                                                                                                                                                                                                                                               3868       
notepad++.exe        "C:\Program Files\Notepad++\notepad++.exe"                                                                                                                                                                                                                                    4072       
notepad.exe          "C:\WINDOWS\system32\NOTEPAD.EXE" C:\Documents and Settings\Quy Nguyen\Desktop\cool.txt                                                                                                                                                                                       2228       
cmd.exe              "C:\WINDOWS\system32\cmd.exe"                                                                                                                                                                                                                                                 2552       
wmic.exe             WMIC /OUTPUT:C:\ProcessList.txt PROCESS get Caption,Commandline,Processid                                                                                                                                                                                                     2480       
wmiprvse.exe         C:\WINDOWS\system32\wbem\wmiprvse.exe                                                                                                                                                                                                                                         1744       

4 个答案:

答案 0 :(得分:3)

替换

$temp_arr = explode(WHAT HERE, $line);

$temp_arr = preg_split('/\s+/', $line, -1, PREG_SPLIT_NO_EMPTY);

编辑:添加了PREG_SPLIT_NO_EMPTY

好的,所以你的问题有所改变。这段代码应该完全符合您的要求:

$processes = 'the list you posted';

$temp = preg_split('/\s*(?:\r?\n)+/', $processes, -1, PREG_SPLIT_NO_EMPTY);
$process_list = array();
foreach ($temp as $process) {
    $process_list[] = array_pad( // array_pad makes the length consistent
        preg_split(
            '/\s{2,}/', // match only 2 or more consecutive spaces for splitting
            $process,
            3,
            PREG_SPLIT_NO_EMPTY), // ignore empty matches (i.e., end of line)
        3, // pad array to a length of 3
        ''
    );
}

$process_list_final = array();
$process_list_titles = array_shift($process_list);

foreach ($process_list as &$plist_item) {
    $plist_item = array_combine($process_list_titles, $plist_item);
}

它可能需要一些清理,但你可以自己做=)

您可以查看一些功能:

答案 1 :(得分:2)

您可能想要preg_split

$str = "col_1          col_2  col_3
    row1 row2 row3
    row12 row22        row33";

$arr = explode("\n", $str);

foreach($arr as $line)
{
   $temp_arr = preg_split("#\s+#", $line, -1, PREG_SPLIT_NO_EMPTY); 
}
与爆炸不同,

preg_split允许您使用称为正则表达式的东西将字符串拆分为块。在这种情况下:

  • #“开始正则表达式”
  • \s+表示“一个或多个连续的空格”。
  • -1表示匹配数量不应有任何限制(如果您愿意,请将其更改为您的首选号码)
  • PREG_SPLIT_NO_EMPTY是一个特殊的常量,它告诉方法永远不会返回空结果,所以你不必担心这个:

      

    ROW1

  •   

     

修改


注意到你的编辑。您可以将正则表达式修改为"#\s++#"以使其至少搜索2个空格,并且可以继续添加+,或者您可以使用大括号为您完成工作。您可以看到更多here

答案 2 :(得分:0)

$temp_arr = explode("\n", $line); 

答案 3 :(得分:0)

在PHP中,你可以在php中做到这一点。

我不知道您必须爆炸的真实数据是什么,但如果您只有空格分隔的数据,您可以这样做:

foreach ($arr as $line) {
  // removing double-spaces
  while(strpos($line, ' ') !== false) $line = str_replace('  ', ' ', $line);
  // trim leading and trailing spaces. you can safely move it to explode
  $line = trim($line);
  // will be better if you replace double-spaces before. it will be faster a lot.
  //-> just space character (0x20) here now (!)
  $temp_arr = explode(' ', $line);
}

您还可以使用list立即将数组拆分为变量。就像那样:

list( $row1, $row2, $lastrow ) = explode(" ", $line);`

不要将preg_split用于该简单问题。太慢了。

祝你好运)