首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在n字段之后拆分一个字符串,并从PHP中的其余部分创建一个数组?

如何在n字段之后拆分一个字符串,并从PHP中的其余部分创建一个数组?
EN

Stack Overflow用户
提问于 2018-05-03 11:07:59
回答 3查看 54关注 0票数 1

我有以下字符串:

代码语言:javascript
复制
*/3 * * * * echo yes

我想要做的是创建一个包含2个元素的数组,其中元素在第5个字段之后彼此分开:

代码语言:javascript
复制
$result = [ "*/3 * * * *", "echo yes" ];

在Linux bash shell中,我只需使用:

代码语言:javascript
复制
echo "*/3 * * * * logger yes" | cut -d' ' -f1-5
echo "*/3 * * * * logger yes" | cut -d' ' -f6-

正如你所看到的,这是一个cron入口。因此,编写RegEx将非常不方便,因为字段可能会更改。好的,我可以编写一个RegEx,它用空格分隔符将元素分开,但是我想知道PHP中是否有类似于GNU cutawk的函数,我可以用来在第5个字段之后分割这两个部分。

如何使用PHP实现相同的结果?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-03 11:16:02

试试这个:

代码语言:javascript
复制
$result = [
   implode('', array_slice(explode(' ', $string), 0, 5),
   implode('', array_slice(explode(' ', $string), 5)
];
票数 1
EN

Stack Overflow用户

发布于 2018-05-03 11:24:35

尝试解析任何事物的第一步就是理解您要解析的事物的语法。如果您不能定义这一点,那么您随后所做的任何事情都将失败。在没有定义的情况下只提供一个或两个例子将是结束您的问题的理由,但是它看起来非常像一个crontab文件。这个语法定义得很好,但是它并不像你想的那样工作。

  • 字段不是由“”分隔,而是由可变数量的空白分隔。
  • 在第一个字符之前可能有前导空格。
  • 总有6个字段
  • 所有字段都可以是可变长度的,并且包含(几乎)任何可打印的ASCII图表。
  • 第六个字段可以包含嵌入和未转义的空白。

您的剪切方法不能正确解析此语法。

您可以使用regex解析它:

代码语言:javascript
复制
if (preg_match('/^(\s*\S+)(\s+\S+)(\s+\S+)(\s+\S+)(\s+\S+)(\s+.+)$/', $str, $match)) {
    print_r($match);
} else {
    print "invalid";
}

从输出中可以清楚地看到,如何创建数组。

票数 2
EN

Stack Overflow用户

发布于 2018-05-03 11:18:44

一起使用的explode()array_slice()implode()函数的工作方式类似于cut工具。

您可以使用它将字符串拆分为一个数组:

代码语言:javascript
复制
$line = '*/3 * * * * echo yes';

$parts = explode(' ', $line);

然后可以使用array_slice()来提取计划和命令,并使用implode()将数组转换为字符串:

代码语言:javascript
复制
$schedule = implode(' ', array_slice($parts, 0, 5));

$command = implode(' ', array_slice($parts, 5));

print $schedule.PHP_EOL.$command;

它将显示:

代码语言:javascript
复制
*/3 * * * *
echo yes

你自己试试吧:https://3v4l.org/sW7VJ

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50153570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档