php 输出某一列后面全部字符


有一些记录,空白分割的,空格或Tab不确定,内容仅常规 ASCII 字符组合
比如每一行不少于10列
我想取的第十列以及之后的部分作为提取的字符串存储

现在根据特定的几个字符做的正则,还有没有其他的方法取列以及余下的部分

php shell

Hotneca 11 years, 5 months ago
   
  <?php
  
$strs =<<<EOF
1111 2222 3333 4444 这一行全是空格
1111 2222 3333 4444 这一行全是tab
1111 2222 3333 4444 这一行有空格有tab
EOF;

$n = 5; // 取的是第5列
//这个事情用正则来处理
$reg = '/\s*(?:\S+\s+){' . ($n - 1) . '}(.*)/';

$matches = array();
preg_match_all($reg, $strs, $matches);
print_r($matches[1]);

请输入图片描述
输出

   
  Array
  
(
[0] => 这一行全是空格
[1] => 这一行全是tab
[2] => 这一行有空格有tab
)

关于这个正则的解释
因为内容是空白分割,所以可以认为就2中区别,空白字符(\s)与非空白字符(\S),而列的组成则是
非空白字符 空白字符 非空白字符 空白字符 非空白字符
可以看到规律为
(非空白字符 空白字符) (非空白字符 空白字符) (非空白字符 空白字符) (非空白字符)
换成正则的字符
(\S+\s+) (\S+\s+) (\S+\s+) (\S+)

   
  \s*         // 可能的前置空白
  
(?: // 不捕获的内容,这里取的分组的意思
\S+\s+ // 非空白字符+空白字符
) // 分组结束
{4} // 跳过4次分组,则后面的就是第5组
(.*) // 捕获后面的所有内容

banpu answered 11 years, 5 months ago

Your Answer