在字符串PHP中查找模式

在字符串PHP中查找模式,php,regex,Php,Regex,我正在寻找一种在PHP字符串中查找模式的方法。我知道preg_match函数,但它只返回1或0 我有一些这样的交易 “婴儿文具5%折扣” “50美元以上订单10美元折扣” “30美元以上订单5美元折扣” “超过40美元的订单折扣7.50美元” “您订单的5%折扣” “购买任何商品均可享受11%的折扣” “50美元以上订单5美元折扣” “所有订单都打九折” “100美元以上订单10美元折扣” “$3随购随付” 我想做的是从交易文本中获得$x或$xx或$xxx或x%或xx%或xxx% 我想得到实际值

我正在寻找一种在PHP字符串中查找模式的方法。我知道
preg_match函数
,但它只返回1或0

我有一些这样的交易

“婴儿文具5%折扣”

“50美元以上订单10美元折扣”

“30美元以上订单5美元折扣”

“超过40美元的订单折扣7.50美元”

“您订单的5%折扣”

“购买任何商品均可享受11%的折扣”

“50美元以上订单5美元折扣”

“所有订单都打九折”

“100美元以上订单10美元折扣”

“$3随购随付”

我想做的是从交易文本中获得$x或$xx或$xxx或x%或xx%或xxx%

我想得到实际值,而不是检查模式是否存在

例如,从

“100美元以上的订单可享受10美元折扣”


我想得到$10和$100并将它们保存在一个变量中。

函数
preg\u match\u all()
可用于将匹配项存储到另一个变量(函数的第三个参数)


你试过什么?您的示例包含两个字符串,例如$###,那么应该匹配什么?首先,最后,全部?请注意,您的模式目前不匹配
$5
,OPs示例不包含十进制值,因此您可能根本不需要匹配它们。否则,您可以对数字部分使用
[0-9]+(?:\[0-9]+)?
。编辑我的答案。刚刚将第一个
+
更改为
*
。OP的一些示例确实包含十进制值,如
$7.50
well@MateiMihai:如何获取正则表达式中的%值。如果我必须在100美元的基础上打10%的折扣,我怎么才能拿到呢。
$str = '$10 Off Orders Over $100';
$matches = [];
$pattern = '/\$[0-9]*\.{0,1}[0-9]+/';
preg_match_all($pattern, $str, $matches);

echo $matches[0][0]; // $10
echo $matches[0][1]; // $100