bey*_*ski 3 php arrays parsing
我想得到命令标签的值(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]);
Run Code Online (Sandbox Code Playgroud)
输出:
Array
(
[GET] => a,
[FROM] => p
[IN] => a
[from] => Sarajevo"
)
Run Code Online (Sandbox Code Playgroud)
我正在寻找这个输出:
Array
(
[GET] => a, b
[FROM] => p
[IN] => a and c="I am from Sarajevo" or d>1
)
Run Code Online (Sandbox Code Playgroud)
如您所见,问题在于字符串中的空格和重复的命令标记(如from).那我怎么解析这个命令呢?
您无法使用单个正则表达式轻松解析它.(这是可行的,但并不简单.)
您应该使用一个简单的标记化器,其中正则表达式再次成为一个有用的工具:
preg_match_all('/\w+|".*?"|\W/', $_cmd = 'GET a, b FROM p IN a and c="I am from Sarajevo" or d>1 ', $list);
Run Code Online (Sandbox Code Playgroud)
这给你一个简单的列表,你只需找到你感兴趣的子句,然后重新合并后续的令牌(虽然我对你的用例感到困惑):
[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
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |