想要在以下字符串中提取金额:
£5000 per Night - 1 bedroom - Serviced Apartment
有关如何使用preg匹配所有内容的想法吗?
我正在使用这种模式:
preg_match_all("|£(\d)|U",$string,$matches);
但它只取5而不是5000
如果是15,000英镑,可以用逗号提取它吗?
thx求助,
的Stephane
答案 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,\.]+
也可以正常工作(你需要逃避这段时间,因为它是正则表达式中特殊的“任何角色”匹配)。