让我解释一下我想做什么。
我需要使用SSH连接到设备并执行一些shell命令。我得到这些命令的结果(流,使用ssh2_fetch_stream
)并保存到变量中。这很好。
但我需要知道的是如何搜索字符串中的元素? 这是一个示例字符串:
$stringToSearch = "id=10 name=interfacename1 stringx=102040 stringy=50606040,id=20 name=interfacename2 stringx=872345 stringy=23875454,id=30 name=interfacename3 stringx=654389 stringy=34567865";
我需要获得所有' name ='结果,如(SELECT name FROM stringToSearch;
),这将返回:
____name____ interfacename1 interfacename2 interfacename3
我创建了一个简单的函数来读取这个字符串。
<?php
function readString($stringToSearch, $start, $end) {
$result = '-1';
// I need to do a loop here, but how can I do it to read and return all elements between $start and $end?
if(strlen(strstr($stringToSearch, $start)) > 0)
{
$startsAt = strpos($stringToSearch, $start) + strlen($start);
$endsAt = strpos($stringToSearch, $end, $startsAt);
$result = substr($stringToSearch, $startsAt, $endsAt - $startsAt);
}
return $result;
}
$stringToSearch = 'id=10 name=interfacename1 stringx=102040 stringy=50606040,id=20 name=interfacename2 stringx=872345 stringy=23875454,id=30 name=interfacename3 stringx=654389 stringy=34567865';
$element = readString($stringToSearch, 'name=', ' '); // Will return only the 1st element
?>
但我只能检索第一个元素。如何获取此字符串中的所有元素?
答案 0 :(得分:2)
试试这个解决方案:)
<?php
$stringToSearch = "id=10 name=interfacename1 stringx=102040 stringy=50606040,id=20 name=interfacename2 stringx=872345 stringy=23875454,id=30 name=interfacename3 stringx=654389 stringy=34567865";
var_dump(getName($stringToSearch));
function getName($stringToSearch) {
$pattern = '/name=([A-Z0-9]*)/i';
if(preg_match_all($pattern, $stringToSearch, $result) == 0){
return NULL;
}
return $result[1];
}
增强功能(获取所需参数的所有值):
/**
* @param String $varName : the name of variable to get their values. ex: stringx, stringy
* @param String $stringToSearch : the string to search in
* @return Array if variable was found in $stringToSearch, NULL else
*/
function getName($varName, $stringToSearch) {
$pattern = '/' . $varName . '=([A-Z0-9]*)/i';
if(preg_match_all($pattern, $stringToSearch, $result) == 0){
return NULL;
}
return $result[1];
}
答案 1 :(得分:0)
使用Halayem Anis的答案,我能够找到字符串中的所有元素。 但我发现了其他问题。如果我有这样的字符串:name =&#34; foo bar&#34; (中间有空间)。
为了解决这个问题,我调整了$ pattern。
结果是:
//$varname = string to be searched like name=
//$stringToSearch = the original string
function getName($varName, $stringToSearch) {
$pattern = '/(?<=' . $varName . ')"(.*?)"/i'; // Changed this to get all between name=""
if(preg_match_all($pattern, $stringToSearch, $result) == 0){
return NULL;
}
return $result[1];
}