从目标字符串中选择除空白之外的所有文本

时间:2013-01-28 21:20:04

标签: php regex

我有一个类似于以下内容的字符串

&pound;&nbsp;                               0.00<br>

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

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

给出以下结果

                       0.00

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

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

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

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

e.g. 
0.00
instead of 
           0.00

4 个答案:

答案 0 :(得分:2)

trim()结果字符串?

$result = trim($result);

答案 1 :(得分: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

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

答案 2 :(得分:2)

为什么不简化regexp?

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

更新:更一般的情况:

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

答案 3 :(得分: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);

出;

Array
(
    [0] => &pound;&nbsp;                               0.00
    [1] => pound;&nbsp
    [2] => 0.00
)