gpt4 book ai didi

php - (PHP) 解析命令

转载 作者:可可西里 更新时间:2023-10-31 23:57:31 25 4
gpt4 key购买 nike

我想获取命令标签(GET、FROM、IN 等)的值。我的命令是:

// My command
$_cmd = 'GET a, b FROM p IN a and c="I am from Sarajevo" or d>1 ';

// My parser
if(preg_match_all('/(GET|FROM|IN)\s+([^\s]+)/si',$_cmd, $m))
$cmd = array_combine($m[1], $m[2]);

输出:

Array
(
[GET] => a,
[FROM] => p
[IN] => a
[from] => Sarajevo"
)

我正在寻找这个输出:

Array
(
[GET] => a, b
[FROM] => p
[IN] => a and c="I am from Sarajevo" or d>1
)

如您所见,问题在于字符串中的空格重复命令标签(如from)。那么我该如何解析这个命令呢?

最佳答案

您无法使用单个正则表达式轻松解析它。 (这是可行的,但并不简单。)

您应该使用一个简单的分词器,其中正则表达式再次成为一个有用的工具:

  preg_match_all('/\w+|".*?"|\W/', $_cmd = 'GET a, b FROM p IN a and c="I am from Sarajevo" or d>1 ', $list);

这为您提供了一个简单的列表,您只需在其中找到您感兴趣的子句,然后重新合并后续标记(尽管我对您的用例感到困惑):

[0] => Array
(
[0] => GET
[1] => a
[2] => ,
[3] => b
[4] => FROM
[5] => p
[6] => IN
[7] => a
[8] => and
[9] => c
[10] => =
[11] => "I am from Sarajevo"
[12] => or
[13] => d
[14] => >
[15] => 1
)

关于php - (PHP) 解析命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7040692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com