php preg_replace,我需要在点后更换所有内容(例如340.38888>需要清理340)

时间:2010-05-16 12:48:36

标签: php preg-replace

我需要在点后更换所有内容。我知道它可以用正则表达式完成,但我仍然是新手,我不明白正确的语法,所以请帮助我。

我尝试了波纹管代码但不起作用:

  $x = "340.888888";
$pattern = "/*./"
 $y = preg_replace($pattern, "", $x);
print_r($x);
谢谢, 迈克尔

4 个答案:

答案 0 :(得分:9)

我可能错了,但这听起来像是使用RegEx锤子来解决非常不钉形的问题。如果您只是想截断正浮点数,可以使用

$x = 340.888888;
$y = floor($x);

编辑:正如Techpriester的评论所指出的,这将始终向下舍入(因此-3.5变为-4)。如果那不是您想要的,您可以使用强制转换,如$y = (int)$x

答案 1 :(得分:3)

正如其他人已经提到的:有更好的方法来获取数字的整数部分。

但是,如果你问这个是因为你想学习一些正则表达式,那么这是怎么做的:

$x = "340.888888";
$y = preg_replace("/\..*$/", "", $x);
print_r($y);

正则表达式\..*$表示:

\.    # match the literal '.'
.*    # match any character except line breaks and repeat it zero or more times
$     # match the end of the string

答案 2 :(得分:1)

你也可以......

$x = "340.888888";
$y = current(explode(".", $x));

答案 3 :(得分:1)

正则表达式中的.表示“任何字符(新行除外)。要实际匹配点,您需要将其转义为\.

*本身无效。它必须显示为x*,这意味着模式“x”重复零次或多次。在您的情况下,您需要匹配使用\d的数字。

此外,您不希望将Foo... 123.456替换为Foo 123。数字应出现≥1次。应使用+代替*

所以你的替换应该是

$y = preg_replace('/\\.\\d+/', "", $x);

(并确保要截断的数字的格式为123.456,而不是.456,请使用lookbehind。

$y = preg_replace('/(?<=\\d)\\.\\d+/', "", $x);