如何解析命令行字符串以使用正则表达式获取每个参数?

时间:2016-01-24 23:06:03

标签: php regex ssh

我正在使用PHP并尝试解析从磁盘上的配置文件中获取的信息。这条线看起来像这样:

DELIMITER $$ CREATE PROCEDURE parent_reg(p_username VARCHAR(100), p_password VARCHAR(200), p_email VARCHAR(200) ) BEGIN DECLARE mycount INT; DECLARE myreturncode INT; SELECT COUNT(pu.username) INTO mycount FROM `parent_user` pu WHERE pu.username = p_username; IF (mycount > 0 ) THEN SET myreturncode = -1; ELSE SET myreturncode = 1; INSERT INTO `parent_user` (`username`, `password`, `email`) VALUES (p_username, p_password, p_email); END IF; SELECT myreturncode AS `ReturnValue`; END$$ DELIMITER ;

我已尝试使用正则表达式或在php option ssh '-p 443 -i /root/.ssh/id_rsa -N -T -R 0.0.0.0:2222:localhost:22 root@example.com下使用awk|cut,但我没有取得任何成功。

我的理想回报值如下所示:

exec

如何使用RegEx从字符串中获取所需的参数?

1 个答案:

答案 0 :(得分:2)

它并不漂亮,毫无疑问可以得到显着改善,但除了2222 ???

之外,它或多或少都能满足要求。
$str="option ssh      '-p 443 -i /root/.ssh/id_rsa -N -T -R 0.0.0.0:2222:localhost:22 root@example.com";

$pttn='#(-p (\d{1,3}) .*:(\d+):localhost:(\d+) ((\w+)@(.*)))#';
preg_match( $pttn, $str, $matches );
$response=array( 'user'=>$matches[6], 'port'=>$matches[2], 'host'=>$matches[7], 'lport'=>$matches[4], 'rport'=>$matches[3] );


print_r( $response );

outputs:
--------
Array
(
    [user] => root
    [port] => 443
    [host] => example.com
    [lport] => 22
    [rport] => 2222
)

就像我说的那样,不是很漂亮但是......