我一直在研究一个从某个网站提取信息的脚本。该网站从数据库中提取信息,并以用户可以轻松阅读的方式(像往常一样)显示它。
想象一下它看起来像这样:
变量 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"?
谢谢:)
使用正则表达式提取所有匹配项,然后选择所需的匹配项:
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>");
您可以在此演示中看到它的工作原理。