在字符串中搜索元素
Search elements inside string
让我解释一下我想做什么。
我需要使用 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;
),这会 return:
____name____
接口名称 1
接口名称 2
接口名称 3
我创建了一个简单的函数来读取这个字符串。
<?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
?>
但我只能检索第一个元素。我怎样才能得到这个字符串中的所有元素?
试试这个解决方案 :)
<?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];
}
使用 Halayem Anis 的回答,我能够找到字符串中的所有元素。
但是我发现了其他问题。如果我有这样的字符串:name="foo bar"(中间有 space)。
为了解决这个问题,我修改了 $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];
}
让我解释一下我想做什么。
我需要使用 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;
),这会 return:
____name____ 接口名称 1 接口名称 2 接口名称 3
我创建了一个简单的函数来读取这个字符串。
<?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
?>
但我只能检索第一个元素。我怎样才能得到这个字符串中的所有元素?
试试这个解决方案 :)
<?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];
}
使用 Halayem Anis 的回答,我能够找到字符串中的所有元素。 但是我发现了其他问题。如果我有这样的字符串:name="foo bar"(中间有 space)。
为了解决这个问题,我修改了 $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];
}