我已经在几个使用strpos的函数中看到了这个,但是不能围绕添加额外空间的目的。有人可以帮我理解这一点。
示例是函数get_string_between(见下文),它返回2个标记之间的内容。所以对于字符串" 这是我的[tag]狗[/ tag] "它会返回 - >的狗
我理解该功能的作用,但
的目的是什么$string = ' ' . $string;
以下内容:
function get_string_between($string, $start, $end){
$string = ' ' . $string;
$ini = strpos($string, $start);
if ($ini == 0) return '';
$ini += strlen($start);
$len = strpos($string, $end, $ini) - $ini;
return substr($string, $ini, $len);
}
$fullstring = 'this is my [tag]dog[/tag]';
$parsed = get_string_between($fullstring, '[tag]', '[/tag]');
echo $parsed; // (result = dog)
答案 0 :(得分:2)
看起来他们已将其添加,以便在strpos
返回false
时不必处理。这样做有点奇怪,但结果是一样的。
这是一个更强大的例子:
function get_string_between($string, $start, $end) {
// String is empty, will never find anything
if (strlen($string) === 0) {
return '';
}
// Empty tags, not possible to find in the string
if (strlen($start) === 0 || strlen($end) === 0) {
return '';
}
$startIndex = strpos($string, $start);
if ($startIndex === false) {
return ''; // Start not found in string
}
// Get end with offset of start, so it must appear
// after the start tag
$endIndex = strpos($string, $end, $startIndex);
if ($endIndex === false) {
return ''; // End not found in string
}
$from = ($startIndex + strlen($start));
$length = ($endIndex - $from);
return substr($string, $from, $length);
}
或者您可以使用正则表达式:
function get_string_between($string, $start, $end) {
if (strlen($string) === 0 || strlen($start) === 0 || strlen($end) === 0) {
return '';
}
$start = preg_quote($start, '/');
$end = preg_quote($end, '/');
preg_match("/(?<=$start).*?(?=$end)/", $string, $result);
if (count($result) > 0) {
return array_shift($result);
}
return '';
}