我正在尝试修剪我从系统中获取的字符串(“dsquery user”); 运行命令时输出如下:
"CN=Administrator,CN=Users,DC=server,DC=local"
"CN=Guest,CN=Users,DC=server,DC=local"
"CN=krbtgt,CN=Users,DC=server,DC=local"
我想要做的是我需要获得每个用户,所以我需要在CN =之后获取该部分并将其存储在数组中。 这是现在的代码:
<?php
$s=system("dsquery user");
$t=explode(" ", str_replace('"', "", $s));
for($i=0;isset($t[$i]);$i++)
{
$y=explode("=", $t[$i]);
$a[]=substr($y[1], 0, strpos($y[1], ","));
}
for($j=0;isset($a[$j]);$j++)
{
echo $a[$j]."<br>";
}
?>
但我唯一得到的是最后一个用户,所以在这种情况下krbtgt .. 任何帮助都很受欢迎!
是否有遗漏的角色?
Copy pasted from terminal:
"CN=Administrator,CN=Users,DC=dennizserver,DC=local"[End of Line(LF)]
"CN=Guest,CN=Users,DC=dennizserver,DC=local"[End of Line(LF)]
"CN=krbtgt,CN=Users,DC=dennizserver,DC=local"[End of Line(LF)]
Copy pasted from system output:
"CN=Administrator,CN=Users,DC=dennizserver,DC=local"[Space]"CN=Guest,CN=Users,DC=dennizserver,DC=local"[Space]"CN=krbtgt,CN=Users,DC=dennizserver,DC=local"[Space]krbtgt
答案 0 :(得分:1)
$out = <<<END
"CN=Administrator,CN=Users,DC=server,DC=local"
"CN=Guest,CN=Users,DC=server,DC=local"
"CN=krbtgt,CN=Users,DC=server,DC=local"
END;
$matches = array();
preg_match_all('/CN=([^,"]+)/', $out, $matches);
print_r($matches[1]);
打印:
Array
(
[0] => Administrator
[1] => Users
[2] => Guest
[3] => Users
[4] => krbtgt
[5] => Users
)
答案 1 :(得分:0)
您需要在使用之前定义$ a:
$s="CN=Administrator,CN=Users,DC=server,DC=local CN=Guest,CN=Users,DC=server,DC=local CN=krbtgt,CN=Users,DC=server,DC=local";
$t=explode(" ", str_replace('"', "", $s));
$a = array();
for($i=0;isset($t[$i]);$i++){
$y=explode("=", $t[$i]);
$a[]=substr($y[1], 0, strpos($y[1], ","));
}
for($j=0;isset($a[$j]);$j++) {
echo $a[$j] . "\n";
}
根据@ axiac的答案修改答案:
$s= <<<SYSTEM
"CN=Administrator,CN=Users,DC=dennizserver,DC=local"[End of Line(LF)]
"CN=Guest,CN=Users,DC=dennizserver,DC=local"[End of Line(LF)]
"CN=krbtgt,CN=Users,DC=dennizserver,DC=local"[End of Line(LF)]
SYSTEM;
$matches = array();
preg_match_all('/CN=([^,"]+)/', $s, $matches);
echo print_r($matches, true);
这很好用并打印:
Array
(
[0] => Array
(
[0] => CN=Administrator
[1] => CN=Users
[2] => CN=Guest
[3] => CN=Users
[4] => CN=krbtgt
[5] => CN=Users
)
[1] => Array
(
[0] => Administrator
[1] => Users
[2] => Guest
[3] => Users
[4] => krbtgt
[5] => Users
)
)
然后你可以循环遍历$ matches数组,就像你已经在做的那样......
答案 2 :(得分:0)
最后使用正则表达式解决了它。 问题是系统输出只给了我最后一行,所以我需要将系统更改为exec并使用输出变量作为数组并循环通过它。 这是最终的解决方案:
<?php
$s=exec("dsquery user", $retval);
echo "<br \>";
$matches = array();
for($i=0;$i<3;$i++) {
preg_match_all('/CN=([^,"]+)/', $retval[$i], $matches);
echo $matches[1][0];
}
?>