Php 如何在HTML中查找数字?

Php 如何在HTML中查找数字?,php,regex,Php,Regex,我应该提到我使用preg_match。 这是一个更大的代码修复,切换方法现在将是一个大头痛 我正在尝试创建一个正则表达式匹配: <span class="paper-name">some string</span>\r </h1>\r <div class="data-row">\r <span class="num">0.25 一些字符串\r\r\r 0.25 我真正需要的是最后一部分——数字。 它可以从

我应该提到我使用preg_match。 这是一个更大的代码修复,切换方法现在将是一个大头痛

我正在尝试创建一个正则表达式匹配:

<span class="paper-name">some string</span>\r    </h1>\r    <div class="data-row">\r        <span class="num">0.25
一些字符串\r\r\r 0.25
我真正需要的是最后一部分——数字。 它可以从0.00到9.99

我试图打破它:

<span class="paper-name">some string</span>
<div class="data-row">
<span class="num">
0.25
一些字符串
0.25
并发现两者之间没有运气。有人能帮忙吗

我非常接近: 我可以找到第一部分:

^.*(?<=(<span class="paper-name">some string<))
^.*(使用正则表达式

$str = '<span class="paper-name">some string</span><div class="data-row"><span class="num">0.25';

preg_match('/([0-9]+\.?[0-9].)/', $str, $matches);

echo $matches[1];
$str='some string0.25';
预匹配('/([0-9]+\.?[0-9].)/',$str,$matches);
echo$匹配[1];

改用解析器方式:

<?php

# html string
$html = <<<DATA
<h1>
    <span class="paper-name">some string</span>
</h1>
<div class="data-row">
    <span class="num">0.25</span>
</div>
DATA;

# set up the domdocument
$dom = new DomDocument();
$dom->loadHTML($html);

# the xpath object
$xpath = new DOMXpath($dom);

# query the dom
$numbers = $xpath->query("//span[@class = 'num']");

# iterate over the results
foreach ($numbers as $number) {
    echo $number->nodeValue;
}
并且将适用于大多数其他
HTML
代码段,而正则表达式可能不适用


编辑:

如果您坚持使用正则表达式(为什么?),您可以尝试:

<span class="num">\K\d(?:\.\d{2})?
\K\d(?:\.\d{2})?

请参阅。

如果使用正则表达式,请尝试:

$html='1!'
一些绳子
0.25
0.22
';
preg#u match#u all('#(?:\s+)(?P\d(?:\.\d{2}):?)#isu',$html,$match);
变量转储($match['num']);

试试这个regexp
/[0-9]+\.[0-9]{2}$/g
HTML和regex的可能重复项不是好朋友。使用解析器,它更简单、更快、更易于维护。请参阅:数字必须介于
0.00
9.99
您的regex匹配
1.2X
并匹配
ABCD123456XYZ
0.25
<span class="num">\K\d(?:\.\d{2})?
$html = '<h1>
    <span class="paper-name">some string</span>
</h1>
<div class="data-row">
    <span class="num">


0.25

</span>
<div class="data-row">
    <span class="num">


0.22

</span>
</div>';

preg_match_all('#<span class="num">(?:\s+)?(?P<num>\d(?:\.\d{2}):?)#isu', $html, $match);
var_dump($match['num']);