1

我一直在研究从某个网站提取信息的脚本。所述网站从数据库中提取信息并以用户可以轻松阅读的方式显示(像往常一样)。

想象一下它看起来像这样:

变量1: 结果 1 变量 2 结果 2 变量 3:结果 3

我的脚本所做的是它读取页面的源代码并通过获取两个字符串之间的文本来检索“result1”、“result2”和“result3”。

示例代码:

<?php

    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);

    }

    function check($url) {

        // usually, $fullstring = file_get_contents($url);
        $fullstring = "<string1>result1</string1><string1>result2</string1><string1>result3</string1>";

        $result = get_string_between($fullstring, "<string1>", "</string1>");

        echo "<b>Result: </b>".$result;

    }

    check("random");    // just to execute the function

?>

如果你想知道为什么我有 check() 函数,那是因为这段代码是更大的一部分,我需要一个在这种情况下有效的解决方案,所以我试图让它保持完美。

现在,我可以很容易地得到“result1”,因为它是第一次出现,但是我怎样才能得到“result2”和“result3”呢?

谢谢 :)

4

1 回答 1

3

使用正则表达式提取所有匹配项,然后选择您想要的匹配项:

function get_string_between($string, $start, $end) 
{
    preg_match_all( '/' . preg_quote( $start, '/') . '(.*?)' . preg_quote( $end, '/') . '/', $string, $matches);
    return $matches[1];
}

正则表达式将捕获$start$end变量之间的任何内容。

现在该函数返回一个包含所有结果值的数组,您可以从中选择您想要的:

list( $first, $second, $third) = get_string_between( $string,  "<string1>", "</string1>");

您可以在此演示中看到它的工作原理。

于 2012-08-07T18:39:31.587 回答