我有一个类似于以下内容的字符串
£ 0.00<br>
我只对提取£
和<br>
标记之间的字符串中的十进制值感兴趣。
我目前有一个正则表达式:
(?<=£ )(.*?)(?=\<br>)
给出以下结果
0.00
我需要确保最终结果中不包含空格,我尝试了以下内容......
(?<=£ \s*)(.*?)(?=\<br>)
这显然是错误的,意味着我不知道我在做什么。
如何确保提取正确的十进制值减去任何空格?
e.g.
0.00
instead of
0.00
答案 0 :(得分:2)
trim()
结果字符串?
$result = trim($result);
答案 1 :(得分:2)
如果您只对十进制值感兴趣,则正则表达式模式应如下例所示。该示例打印搜索字符串中找到的所有小数。
<?php
$string = '£
5.00<br><br><br>
Shipping £ 3.35<br><br><b>Total £
8.35<br></b>';
$pattern = '/£ \s*(-?[0-9]+\.[0-9]+)<br>/u';
$result = preg_match_all($pattern, $string, $matches);
if($result === FALSE) {
die('error in regex');
}
// output the decimals
if($result > 0) {
foreach($matches[1] as $decimal) {
echo $decimal, PHP_EOL;
}
}
// Output:
//
// 5.00
// 3.35
// 8.35
请注意,该模式将匹配正数和负数小数
答案 2 :(得分:2)
为什么不简化regexp?
/£ \s*([0-9\.]+)<br>/u
更新:更一般的情况:
/£.*([0-9\.]+)<br>/u
答案 3 :(得分:0)
这有效;
$s = '£ 0.00<br>';
preg_match('~&(.*?);\s+([\d\.]+)~i', $s, $m);
// or
// preg_match('~&(\w+);\s+([\d\.]+)~i', $s, $m);
print_r($m);
出;
Array ( [0] => £ 0.00 [1] => pound;  [2] => 0.00 )