我有以下字符串:
*/3 * * * * echo yes我想要做的是创建一个包含2个元素的数组,其中元素在第5个字段之后彼此分开:
$result = [ "*/3 * * * *", "echo yes" ];在Linux bash shell中,我只需使用:
echo "*/3 * * * * logger yes" | cut -d' ' -f1-5
echo "*/3 * * * * logger yes" | cut -d' ' -f6-正如你所看到的,这是一个cron入口。因此,编写RegEx将非常不方便,因为字段可能会更改。好的,我可以编写一个RegEx,它用空格分隔符将元素分开,但是我想知道PHP中是否有类似于GNU cut或awk的函数,我可以用来在第5个字段之后分割这两个部分。
如何使用PHP实现相同的结果?
发布于 2018-05-03 11:16:02
试试这个:
$result = [
implode('', array_slice(explode(' ', $string), 0, 5),
implode('', array_slice(explode(' ', $string), 5)
];发布于 2018-05-03 11:24:35
尝试解析任何事物的第一步就是理解您要解析的事物的语法。如果您不能定义这一点,那么您随后所做的任何事情都将失败。在没有定义的情况下只提供一个或两个例子将是结束您的问题的理由,但是它看起来非常像一个crontab文件。这个语法定义得很好,但是它并不像你想的那样工作。
您的剪切方法不能正确解析此语法。
您可以使用regex解析它:
if (preg_match('/^(\s*\S+)(\s+\S+)(\s+\S+)(\s+\S+)(\s+\S+)(\s+.+)$/', $str, $match)) {
print_r($match);
} else {
print "invalid";
}从输出中可以清楚地看到,如何创建数组。
发布于 2018-05-03 11:18:44
一起使用的explode()、array_slice()和implode()函数的工作方式类似于cut工具。
您可以使用它将字符串拆分为一个数组:
$line = '*/3 * * * * echo yes';
$parts = explode(' ', $line);然后可以使用array_slice()来提取计划和命令,并使用implode()将数组转换为字符串:
$schedule = implode(' ', array_slice($parts, 0, 5));
$command = implode(' ', array_slice($parts, 5));
print $schedule.PHP_EOL.$command;它将显示:
*/3 * * * *
echo yes你自己试试吧:https://3v4l.org/sW7VJ
https://stackoverflow.com/questions/50153570
复制相似问题