PHP正则表达式匹配html

PHP正则表达式匹配html

问题描述:

之间的数据我创建了一个正则表达式,它实际上提取了我需要的数据,但它也包含“>”字符,我该如何摆脱它?这是代码。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问题,但我如何摆脱“<”

如果你想在正则表达式中匹配某些东西,但不捕获它,那么你可以使用“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

$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]