正则表达式 - 提取数字

时间:2010-10-30 18:40:52

标签: php regex string filter

我的文字字符串可能包含以下格式:

现在是39.95英镑只有29.00英镑 OR
是0.95p现在是10p

从每个字符串中提取两个数字的最简单方法是什么,所以我可以稍后再减去它们。

2 个答案:

答案 0 :(得分:1)

您可以使用如下的正则表达式:

/\d+(\.\d+)?/

要小心,因为这不会读取单位,因此如果出现以下情况,您很容易就会出错:

Was £2 Now Only 99p 

您可能还需要注意文本字符串中的逗号。请注意,此处还存在您应该了解的国际化问题。许多国家/地区使用,作为小数点分隔符,使用.作为千位分隔符。您可以从货币猜测区域设置(例如,£表示小数​​点分隔符为.)。

如果您可以更准确地了解您的计划必须接受哪种价值,那么您可能会得到更好的答案。

答案 1 :(得分:1)

这种怪异将捕获由文本分隔的两个数字。它还将捕获单位。

$match = preg_match("/((?:£)?(\d+(?:\.\d+)?)(?:p)?)[a-z\s]*((?:£)?(\d+(?:\.\d+)?)(?:p)?)/i", "Was £39.95 Now Only 99p");

print_r($matches);

这将产生:

Array (
    [0] => Was £39.95 Now Only 99p
    [1] => £39.95
    [2] => 39.95
    [3] => 99p
    [4] => 99
)