使用strpos时的额外空间点

时间:2016-03-22 05:00:56

标签: php parsing

我已经在几个使用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)

1 个答案:

答案 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 '';
}