如何修改PHP正则以匹配Kč/CZK前后的金额数字
PHP正则提取多位置捷克克朗金额解决方案
核心修改点
- 修正原正则中
[Kč,CZK]的错误写法:方括号是单字符匹配规则,无法命中完整的货币单位字符串,改用(Kč|CZK)分组匹配两种单位 - 新增货币单位前置的匹配逻辑,正则同时覆盖「金额在前货币在后」「货币在前金额在后」两种场景
- 优化数字匹配规则,避免匹配空值,要求整数部分至少存在1位数字
完整可运行代码
// 测试用例可替换为三个示例中的任意一个 $string='Rohlík 4,99 Kč 51235'; // $string='Rohlík CZK 4,99 51235'; // $string='Rohlík Kč4,99 51235'; $replace = [' ', '.']; $string = str_replace($replace,"",$string); $string = str_replace(',',".",$string); // 修改后的匹配正则 $pattern = '/(?:(Kč|CZK)(\d+\.?\d*)|(\d+\.?\d*)(Kč|CZK))/'; preg_match($pattern, $string, $matches); // 提取匹配到的金额,判断是前置还是后置场景拿到数字 $price = isset($matches[2]) && $matches[2] !== '' ? $matches[2] : ($matches[3] ?? ''); print_r($price); // 所有测试用例均输出4.99
内容的提问来源于stack exchange,提问作者Aaron7
相关产品推荐
相关产品推荐

