2012-01-16 136 views
1

之間的數據我創建了一個正則表達式,它實際上提取了我需要的數據,但它也包含「>」字符,我該如何擺脫它?這是代碼。PHP正則表達式匹配html

<?php 

$content = file_get_contents('www.example.com'); 
$pattern = "/>([0-9]{2}\.[0-9]{3})/"; 
preg_match_all($pattern, $content, $matches); 
echo $matches[0][2]; 

?> 

和HTML從

<td style="text-align:right" class="row">23.020</td> 

提取它給我的「< 23.020」,但我需要的是「23.020」 我知道這是一個的n00b問題,但我如何擺脫「<」

回答

1

如果你想在正則表達式中匹配某些東西,但不捕獲它,那麼你可以使用「assertion」。對於你的字符串,這將是一個看起來後面的(?<=[>])

/(?<=>)([0-9]{2}\.[0-9]{3})/ 

在你的情況然而,你已經去掉了>錨捕獲組。你只需要訪問正確的結果分組,則:

echo $matches[1][2]; 

[1]指內(...)括號組,而你的[0]將返回完全匹配。

+0

哦,現在我明白了,爲什麼有兩個數組鍵,謝謝! – Riff 2012-01-16 16:40:03

+0

您還可以查看['PREG_SET_ORDER'](http://php.net/manual/en/function.preg-match-all.php#~PREG_SET_ORDER)作爲參數。這是一個更合乎邏輯的分組,在某些情況下更容易處理。 – mario 2012-01-16 16:42:14

2
$content = '<td style="text-align:right" class="row">23.020</td>'; 
$pattern = "/>([0-9]{2}\.[0-9]{3})/"; 
preg_match_all($pattern, $content, $matches); 
var_dump($matches); 

會給你

array(2) { 
    [0]=> 
    array(1) { 
    [0]=> 
    string(7) ">23.020" 
    } 
    [1]=> 
    array(1) { 
    [0]=> 
    string(6) "23.020" 
    } 
} 

所以,簡單地使用$matches[1][0]