2011-04-13 24 views
2

我要抓住從下面的文本頁面數:我有一個正則表達式沒有經驗幫助與正則表達式

<font size="1" color="blue" face="Verdana, Arial">Page 1 of 5/22 Records 

。由於我主要用C編程,我試過這個:

sscanf($result, "Page 1 of %d", $Npages); 

但它不起作用。

+1

「但它不起作用」是你在生活中做出的最無用的陳述,永遠保證。 「不起作用」是什麼意思?你看到了什麼_精確的,它與你渴望的行爲有什麼不同? – 2011-04-13 15:52:22

回答

0

嘗試:

<?php 
$str = '<font size="1" color="blue" face="Verdana, Arial">Page 1 of 5/22 Records'; 

if (preg_match('!Page.*?(\d+)\s+/.+Records!', $str, $matches)) { 
    $pages = $matches[1]; 
    echo $pages; 
} 
+0

謝謝,但是它返回的記錄數。不是頁數。 – Cornwell 2011-04-13 15:54:26

+0

對不起,我誤解了您的問題,請嘗試更新的示例。 – Yoshi 2011-04-13 15:56:31

+0

工程很好。謝謝 – Cornwell 2011-04-13 16:05:57

3

你幾乎沒有。 PHP的sscanf可以返回輸出結果,或者使用reference填充解析的值。在你的代碼中,它看起來像你試圖使用一個引用,但你沒有這樣指定它。 PHP中的基準由&指定的變量名之前,所以你也可以使用:

sscanf($result, "Page 1 of %d", &$npages); 

或者,sscanf將返回所有解析值的數組,如果你不按引用傳遞的任何變量:

$result = "Page 1 of 5/22 Records"; 
var_dump(sscanf($result, "Page %d of %d/%d Records")); 
/* 
array(3) { 
    [0]=> 
    int(1) 
    [1]=> 
    int(5) 
    [2]=> 
    int(22) 
} 
*/ 

然後,您可以使用list指定數組變量:

list($page, $npages, $nrecords) = sscanf($result, "Page %d of %d/%d Records"); 
+0

謝謝。如果我只是使用該字符串,那就行了。 sscanf支持的文本數量是否有限制?因爲我通過cURL檢索頁面,所以我的變量有更多的文本。 – Cornwell 2011-04-13 16:02:29

+0

@Cornwell根據我所知(或在手冊頁中提到) – 2011-04-13 16:07:54

0

這裏:

#<font[^>]*>(.*)\/(.*) Records<\/font>#is 

第二個數組元素將有#。

Barry

0

$ str = YOUT STRING; preg_match('/ Page \ d + \ d + /(\ d +)Records /',$ str,$ matches);

print_r($ matches);

+0

(\ d +)令牌將組de數頁並將它們插入到$ matches數組中。 – fdaines 2011-04-13 16:00:46