PHP-php 输出某一列后面全部字符
有一些记录,空白分割的,空格或Tab不确定,内容仅常规 ASCII 字符组合
比如每一行不少于10列
我想取的第十列以及之后的部分作为提取的字符串存储
现在根据特定的几个字符做的正则,还有没有其他的方法取列以及余下的部分
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
有一些记录,空白分割的,空格或Tab不确定,内容仅常规 ASCII 字符组合
比如每一行不少于10列
我想取的第十列以及之后的部分作为提取的字符串存储
现在根据特定的几个字符做的正则,还有没有其他的方法取列以及余下的部分
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(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组
(.*) // 捕获后面的所有内容