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

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

瑾兮 发布于 2016-12-20 字数 230 浏览 1153 回复 1

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

想挽留 2017-10-02 1 楼

<?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组
(.*) // 捕获后面的所有内容