2012-07-11 31 views
0

例如我從這裏的數據響應: http://www.facebook.com/ajax/shares/view/?target_fbid=410558838979218&__a=1Preg_match_all和文本匹配複雜的正則表達式

有看起來像這樣的模式:

data-hovercard=\"\/ajax\/hovercard\/hovercard.php?id=655581307\">

我怎樣才能與解析它preg_match_all()在PHP中? 我知道我需要複雜的正則表達式,但我沒有線索如何在文本中爲這樣的模式寫一個。 感謝您的幫助

UPD: 下面的代碼確實給ID:

$str = 'hovercard.php?id=655581307'; 
preg_match_all('/[0-9]{9}/', $str , $matches); 
print_r($matches); 

這一個犯規

$url = 'http://www.facebook.com/ajax/shares/view/?target_fbid=410558838979218&__a=1'; 
$html = file_get_contents($url); 
preg_match_all('/[0-9]{9}/', $html, $matches); 
print_r($matches); 
+1

那麼這裏唯一的變量是id值的權利?這並不複雜,只需[0-9] {9}就可以實現。沒有? – Maresh 2012-07-11 15:58:38

+0

yeap,我需要得到id。 下面的代碼確實給了我ID如果我在我的源代碼中使用像這樣的字符串變量: $ str ='hovercard.php?id = 655581307';如果我使用 $ html = file_get_contents($ url); 我沒有得到它,看到我的更新問題 – Leg0 2012-07-11 16:10:08

+0

嗯,你導致第二個不是相同的,有14個數字,如果你想它匹配可能是id = [0-9] +&?或[0-9] {9,14}有幾種寫法。 – Maresh 2012-07-11 16:19:03

回答

2

這變得有點凌亂,由於反斜槓轉義的東西,但要完全匹配該字符串,這個調用preg_match_all()應該工作:

preg_match_all('#(data-hovercard=\\\\"\\\\/ajax\\\\/hovercard\\\\/hovercard.php\?id=[0-9]+\\\\">)#', $str, $matches); 

這會給你你在$匹配中發佈的整個字符串。不過,如果你只是想從ID號碼,你可以圍繞添加額外的括號像這樣:

preg_match_all('#(data-hovercard=\\\\"\\\\/ajax\\\\/hovercard\\\\/hovercard.php\?id=([0-9]+)\\\\">)#', $str, $matches); 

而且在$相匹配的數字將分別出現(同樣,你可以刪除包裝整個正則表達式的括號停止匹配整個字符串)。

更新:

現在我看到的問題是更新。如果你的新例子失敗,那是因爲你得到的數據中沒有9位數字的序列。當我嘗試自己時,我只是得到一個回覆​​,說我需要登錄,所以也許你的匹配問題實際上是由於你沒有得到你期望的數據?嘗試轉儲$ html,看看你正在尋找的東西實際上在那裏。

+0

謝謝!沒有看到登錄信息,完全節省了我很多時間呵呵 – Leg0 2012-07-11 16:23:02

+0

非常感謝!第二個是我正在尋找的:) – Leg0 2012-07-12 13:06:03