PHP正则表达式匹配html之间的数据


PHP regex match data between html

我创建了一个regex,它实际上提取了我需要的数据,但它也包括">"字符,我该如何处理它?这是代码。

<?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问题,但我如何摆脱"<"

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

如果您想匹配正则表达式中的某个内容,但不想捕获它,那么您可以使用"断言"。对于您的字符串,它将是一个(?<=[>])后备。

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

然而,在您的情况下,您已经有了一个不包括>锚点的捕获组。你只需要访问正确的结果组,然后:

 echo $matches[1][2];

[1]指的是内部的(...) parens组,而您的[0]将返回完全匹配。