我应该使用哪种模式与preg_match_all()来提取此字符串中的金额?

时间:2011-10-05 17:09:47

标签: php regex preg-match-all

想要在以下字符串中提取金额:

£5000 per Night - 1 bedroom - Serviced Apartment

有关如何使用preg匹配所有内容的想法吗?

我正在使用这种模式:

preg_match_all("|£(\d)|U",$string,$matches);

但它只取5而不是5000

如果是15,000英镑,可以用逗号提取它吗?

thx求助,

的Stephane

3 个答案:

答案 0 :(得分:5)

使用\d+代替\d。否则,它只匹配一个数字。 +表示“一个或多个”。

preg_match_all("|£(\d+)|U",$string,$matches);

(有关重复在正则表达式中如何工作的更多详细信息,请参阅this page。)


允许使用逗号的表达式,并确保它们不在奇怪的位置(例如,500):

preg_match_all("|£(\d+(?:,\d+)*)|U",$string,$matches);

答案 1 :(得分:3)

使用+匹配\d

的一个或多个实例
preg_match_all("|£(\d+)|U",$string,$matches);

答案 2 :(得分:1)

您错过了递归preg_match_all('|£(\d+)|U', $string, $matches)(注意\d之后的'+')

更新以反映价格中的逗号

如果您将价格与逗号或句点匹配,则RegEx看起来像|£([\d,\.]+)| - 作为基本示例。 [ ... ]方括号允许您匹配一组或多个字符而不仅仅是一种类型的字符 - 所以在这个例子中它是任何数字,逗号或句点。 [0-9,\.]+也可以正常工作(你需要逃避这段时间,因为它是正则表达式中特殊的“任何角色”匹配)。