1

我有一个看起来像下面的字符串

&pound;&nbsp;                               0.00<br>

我只对提取£<br>标记之间的字符串中的十进制值感兴趣。我目前有一个正则表达式,它是:

(?<=&pound;&nbsp;)(.*?)(?=\<br>)

这给出了以下结果

                       0.00

我需要确保最终结果中不包含空格,我尝试了类似以下的内容...

(?<=&pound;&nbsp;\s*)(.*?)(?=\<br>)

这显然是错误的,意味着我不知道自己在做什么。

如何确保提取正确的十进制值减去任何空格?

e.g. 
0.00
instead of 
           0.00
4

4 回答 4

2

trim()你得到的字符串?

$result = trim($result);
于 2013-01-28T21:22:20.537 回答
2

如果您只对十进制值感兴趣,则正则表达式模式应如下例所示。该示例打印在搜索字符串中找到的所有小数。

<?php

$string = '&pound;&nbsp;

                          5.00<br><br><br>

                          Shipping&nbsp;&pound;&nbsp;3.35<br><br><b>Total&nbsp;&pound;&nbsp;

                             8.35<br></b>';

$pattern = '/&pound;&nbsp;\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

请注意,该模式将匹配正负小数

于 2013-01-28T21:25:46.590 回答
2

为什么不简化正则表达式?

/&pound;&nbsp;\s*([0-9\.]+)<br>/u

更新:更一般的情况:

/&pound;.*([0-9\.]+)<br>/u
于 2013-01-28T21:27:06.760 回答
0

这行得通;

$s = '&pound;&nbsp;                               0.00<br>';
preg_match('~&(.*?);\s+([\d\.]+)~i', $s, $m);
// or
// preg_match('~&(\w+);\s+([\d\.]+)~i', $s, $m);
print_r($m);

出去;

大批
(
    [0] => &磅;  0.00
    [1] => 英镑; 
    [2] => 0.00
)
于 2013-01-28T21:29:21.950 回答