2012-08-07 99 views
1

我一直在研究從某個網站獲取信息的腳本。該網站從數據庫中提取信息,並以用戶可以輕鬆閱讀的方式顯示(如往常一樣)。如何查找兩個字符串之間的第二個字符串

想象它看起來像這樣:

VAR1:RESULT1 VAR2: RESULT2 VAR3: result3

什麼我的腳本做的是,它讀取網頁的源代碼和檢索「結果1「,」結果2「和」結果3「通過獲取兩個字符串之間的文本。

示例代碼:

<?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 

?> 

如果你想知道爲什麼我有檢查()函數存在就是因爲這個代碼是更大的東西的一部分,我需要在這種情況有效的解決方案,所以我試圖保持它完美無暇。

現在,我可以很容易地得到「result1」,因爲它是第一次出現,但是我怎樣才能得到「result2」和「result3」?

謝謝:)

+0

@Matt簡單文本 – user1298923 2012-08-07 18:39:38

+0

[此文章是否有幫助](http://frankkoehl.com/2009/03/second-third-fourth-occurence-string/)? – Matt 2012-08-07 18:40:31

+0

我不得不重新閱讀代碼幾次,但我明白你要在這裏做什麼。 – Matt 2012-08-07 18:40:55

回答

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工作。

+0

更進一步,您可以添加'$ matches'作爲參考參數'函數get_string_between($ string,$ start,$ end,&$ matches){...}' – Matt 2012-08-07 18:45:32

+0

感謝您的回答,我有兩個的問題。 1)如果我不知道發生的次數,我該怎麼辦(我可以有1,2,3,4,5..200次文本)和2)我如何檢索只有「result1」而不是「string'result1'(length = 7)」?再次感謝 – user1298923 2012-08-07 18:53:13

+0

或者您可以返回$匹配,然後程序員可以將它作爲'array'來處理,而不僅僅是一個字符串。 – Matt 2012-08-07 18:53:51

相關問題