PocketMine-MP 5.18.1 git-9381fc4172e5dce4cada1cb356050c8a2ab57b94
CommandStringHelper.php
1<?php
2
3/*
4 *
5 * ____ _ _ __ __ _ __ __ ____
6 * | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
7 * | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
8 * | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
9 * |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
10 *
11 * This program is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License as published by
13 * the Free Software Foundation, either version 3 of the License, or
14 * (at your option) any later version.
15 *
16 * @author PocketMine Team
17 * @link http://www.pocketmine.net/
18 *
19 *
20 */
21
22declare(strict_types=1);
23
24namespace pocketmine\command\utils;
25
27use function preg_last_error_msg;
28use function preg_match_all;
29use function preg_replace;
30
32
33 private function __construct(){
34 //NOOP
35 }
36
48 public static function parseQuoteAware(string $commandLine) : array{
49 $args = [];
50 preg_match_all('/"((?:\\\\.|[^\\\\"])*)"|(\S+)/u', $commandLine, $matches);
51 foreach($matches[0] as $k => $_){
52 for($i = 1; $i <= 2; ++$i){
53 if($matches[$i][$k] !== ""){ //phpstan can't understand preg_match and friends by itself :(
55 $match = $matches[$i][$k];
56 $args[(int) $k] = preg_replace('/\\\\([\\\\"])/u', '$1', $match) ?? throw new AssumptionFailedError(preg_last_error_msg());
57 break;
58 }
59 }
60 }
61
62 return $args;
63 }
64}