使用php如何将用户名,密码,数据库名,主机名等拆分为变量。
例如:
$ db = “数据库名称://用户名:密码@主机名/ DBNAME”
$ databasename = databasename
$ user = username
$ pass =密码
$ host = hostname
$ dbname = dbname
我尝试过在正则表达式中进行分组。但我不知道如何将组值分配到变量中。
的preg_match(“(^([AZ] )://([AZ] ):???([AZ] )@ [AZ] ) /([az] *?)$)“,$ db,$ matches);
答案 0 :(得分:1)
看看
print_r($matches);
成功比赛后它应该变得清晰。
来自php docs http://pl2.php.net/preg_match:
如果提供了匹配,那么 它充满了结果 搜索。 $ matches [0]将包含 与完整模式匹配的文本, $ matches [1]将有文本 匹配第一个捕获 带括号的子模式,依此类推。
答案 1 :(得分:1)
您可以执行以下操作:
$db = "databasename://username:password@hostname/dbname";
if (preg_match("~^([a-z]+)://([a-z]+):([a-z]+)@[a-z]+/([a-z]+)\$~i",
$db , $matches))
list($ignore, $databasename, $username, $password, $dbname) = $matches;
var_dump($databasename);
var_dump($username);
var_dump($password);
var_dump($dbname);
给出:
string(12) "databasename"
string(8) "username"
string(8) "password"
string(6) "dbname"
或者您可以使用命名组。
答案 2 :(得分:1)
您必须选择一个分隔符(通常是一个不与表达式一起使用的字符)。表达式应以分隔符开头和结尾,您可以选择在结束分隔符后附加标志。 E.g:
preg_match("~(^([a-z]?)://([a-z]?):([a-z]?)@[a-z]?)/([a-z]*?)$)~i", $db , $matches);
您应该考虑扩大大多数字符范围:用户名可以包含数字,密码几乎可以包含任何内容。
我认为如果相应的参数是可选的,字符串(:
,//
,@
...)中的分隔符不一定存在。
最后但并非最不重要的是,正如Kamil Szot已经指出的那样,括号内的匹配被加载到$ matches变量中。
答案 3 :(得分:1)
php > preg_match("#([a-z]+)://([a-z]+):([a-z]+)@([a-z]+)/([a-z]+)$#", $var , $matches);
php > print_r($matches);
Array
(
[0] => databasename://username:password@hostname/dbname
[1] => databasename
[2] => username
[3] => password
[4] => hostname
[5] => dbname
)