获取异常字符之间的字符串
Get string between characters with exception
我正在尝试获取两个 strings/characters 之间的字符串。例如,我想获取 test=
和 ;
之间的字符串“1”:
这是我的工作函数:
function getStringInBetween($str, $start, $end){
$str = ' ' . $str;
$ini = strpos($str, $start);
if ($ini == 0) return '';
$ini += strlen($start);
$len = strpos($str, $end, $ini) - $ini;
return substr($str, $ini, $len);
}
$myString = 'ok=0;test=1;cool=2';
echo getStringInBetween('$myString', 'test=', ';'); // returned output: 1
echo getStringInBetween('$myString', 'cool=', ';'); // this doesn't work. This should output 2
但我的问题是,如果我必须获取 cool=
之间的字符串?我无法通过函数获取它,因为分号 ;
不在末尾。它需要是动态的。我不知道我需要的字符串是否在给定字符串的最后一部分。
我可以对仍然能够获取 cool=
之间的字符串的函数做些什么?另外,调用函数时我必须将分号作为第三个参数。
可以使用explode函数将字符串按token分割,这里使用explode(";", $string)得到如下数组array("ok=0", "test=1", "cool=2")
然后你可以遍历数组并再次调用 explode:
foreach(explode(";", $string) as $pair)
{
$array = explode("=", $pair);
$key = $array[0];
$value = $array[1];
//Do something with $key and $value
}
关于您的功能,类似的东西应该可以解决问题:
function getStringInBetween($str, $start, $end){
$ini = strpos($str, $start);
if ($ini == 0) return '';
$ini += strlen($start);
$endIndex = strpos($str, $end, $ini);
if ($endIndex === false)
return substr($str, $ini);
else
return substr($str, $ini, $endIndex - $ini);
}
你还应该检查 $ini
是否为 false 而不是像那样的 0 : if ($ini === false) return '';
这可以用 strstr
稍微简化一下
function getStringInBetween($str, $start, $end) {
$result = substr(strstr($str, $start), strlen($start));
if (strpos($result, $end) !== false) {
$result = strstr($result, $end,true);
}
return $result;
}
或者您可以使用正则表达式。
function getStringInBetween($str, $start, $end) {
preg_match("/(?<=$start).*?(?=$end|$)/", $str, $matches);
return $matches[0] ?? '';
}
我正在尝试获取两个 strings/characters 之间的字符串。例如,我想获取 test=
和 ;
之间的字符串“1”:
这是我的工作函数:
function getStringInBetween($str, $start, $end){
$str = ' ' . $str;
$ini = strpos($str, $start);
if ($ini == 0) return '';
$ini += strlen($start);
$len = strpos($str, $end, $ini) - $ini;
return substr($str, $ini, $len);
}
$myString = 'ok=0;test=1;cool=2';
echo getStringInBetween('$myString', 'test=', ';'); // returned output: 1
echo getStringInBetween('$myString', 'cool=', ';'); // this doesn't work. This should output 2
但我的问题是,如果我必须获取 cool=
之间的字符串?我无法通过函数获取它,因为分号 ;
不在末尾。它需要是动态的。我不知道我需要的字符串是否在给定字符串的最后一部分。
我可以对仍然能够获取 cool=
之间的字符串的函数做些什么?另外,调用函数时我必须将分号作为第三个参数。
可以使用explode函数将字符串按token分割,这里使用explode(";", $string)得到如下数组array("ok=0", "test=1", "cool=2")
然后你可以遍历数组并再次调用 explode:
foreach(explode(";", $string) as $pair)
{
$array = explode("=", $pair);
$key = $array[0];
$value = $array[1];
//Do something with $key and $value
}
关于您的功能,类似的东西应该可以解决问题:
function getStringInBetween($str, $start, $end){
$ini = strpos($str, $start);
if ($ini == 0) return '';
$ini += strlen($start);
$endIndex = strpos($str, $end, $ini);
if ($endIndex === false)
return substr($str, $ini);
else
return substr($str, $ini, $endIndex - $ini);
}
你还应该检查 $ini
是否为 false 而不是像那样的 0 : if ($ini === false) return '';
这可以用 strstr
function getStringInBetween($str, $start, $end) {
$result = substr(strstr($str, $start), strlen($start));
if (strpos($result, $end) !== false) {
$result = strstr($result, $end,true);
}
return $result;
}
或者您可以使用正则表达式。
function getStringInBetween($str, $start, $end) {
preg_match("/(?<=$start).*?(?=$end|$)/", $str, $matches);
return $matches[0] ?? '';
}