修改$ pattern以使用preg_replace获得所需的结果

时间:2012-05-03 17:25:13

标签: php preg-replace

我有以下代码,我需要进行调整,以获得所需的 echo

<?php

$price = "A1,500.99B";

$pattern = '/([\d,]+\.)(\d+)(.*)$/';   // This is something that I need to change, in order to get the desired result

$formatted_1 = preg_replace($pattern, '$1', $price);
$formatted_2 = preg_replace($pattern, '$2', $price);
$formatted_3 = preg_replace($pattern, '$3', $price);
$formatted_4 = preg_replace($pattern, '$4', $price);

echo $formatted_1;   // Should give A
echo $formatted_2;   // Should give 1,500
echo $formatted_3;   // Should give 99
echo $formatted_4;   // Should give B

?>

我知道我应该在 $ pattern 中添加另一个内容(),并调整上面的 $ pattern ,但我不知道该怎么做。

感谢。

2 个答案:

答案 0 :(得分:2)

如果您只想要匹配,使用preg_replace的任何特殊原因?

此模式符合您的价格:

/([a-zA-Z])([\d,]+)\.(\d+)([a-zA-Z])/

如果你然后写这个PHP:

$price = "A1,500.99B";
//Match any letter followed by at least one decimal digit or comma 
//followed by a dot followed by a number of digits followed by a letter
$pattern = '/([a-zA-Z])([\d,]+)\.(\d+)([a-zA-Z])/';
preg_match($pattern,$price,$match);

$formatted_1 = $match[1];
//etc...

你将有四场比赛。显然你需要添加自己的异常处理。

答案 1 :(得分:0)

这是你要找的吗?

$pattern = '/([0-9a-zA-Z,]+\.)(\d+)(.*)$/';