如何在两个字符串之间找到第二个字符串

时间:2012-08-07 18:34:06

标签: php

我一直致力于从某个网站提取信息的脚本。所述网站从数据库中提取信息并以用户可以轻松阅读的方式显示(就像一直)。

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

Var1 :result1 Var2: result2 Var3: result3

我的脚本所做的是它读取页面的源代码并通过获取两个字符串之间的文本来检索“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”?

谢谢:)

1 个答案:

答案 0 :(得分: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>");

您可以在this demo中看到它。