我用作主题的字符串是:
'在 4 天/3 夜假期节省 68%。只需 249 美元!
我'.\*(\b((enjoy|save)( up to| an extra)?|starting at|as low as|just|only)\b ([0-9]{1,3} ?\%|\$[0-9]+(\.[0-9]{2})?)).\*/i'
用来尝试匹配上述字符串的一部分并将其提取出来。
我正在'$1'
用作替代品,所以我的完整preg_match
看起来像
preg_match('.*(\b((enjoy|save)( up to| an extra)?|starting at|as low as|just|only)\b ([0-9]{1,3} ?\%|\$[0-9]+(\.[0-9]{2})?)).*/i', '$1', 'Save 68% on a 4 Day/3 Night vacation at. Only $249!')
它应该首先匹配'Save 68%'
,但它会不断返回'Only $249'
。
我发现如果我在第一个通配符之后添加一个问号,'.\*?(\b((enjoy|save)( up to| an extra)?|starting at|as low as|just|only)\b ([0-9]{1,3} ?\%|\$[0-9]+(\.[0-9]{2})?)).\*/i'
它会返回'save 68%'
。有没有其他方法解决这个问题。这似乎与我的分组有关。正如我发现的那样
preg_match('/.*\b(enjoy|save)( up to| an extra)?|starting at|as low as|just|only\b.*/i', '$1', 'Save 68% on a 4 Day/3 Night vacation at. Only $249!')
像它应该的那样返回'save'
,但我无法在完整的声明中得到同样的结果。