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

发布于 2016-12-20 21:06:50 字数 135 浏览 1255 评论 1

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

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

评论(1

想挽留 2017-10-02 19:35:05

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文