1

特定の Web サイトから情報を取得するスクリプトに取り組んでいます。上記の Web サイトは、データベースから情報を取得し、ユーザーが簡単に読めるように (いつものように) 表示します。

次のように見えると想像してください。

Var1 : 結果 1 Var2:結果 2 Var3:結果 3

私のスクリプトが行うことは、ページのソース コードを読み取り、2 つの文字列の間のテキストを取得して "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 に答える