在php中替换完全匹配

时间:2009-07-03 09:06:48

标签: php mysql regex

我是php中正则表达式的新手。

我有一些数据,其中一些值存储为零(0)。我想要做的是用' - '替换它们。我不知道哪个值会变为零,因为我的数据库表每天都会更新,这就是为什么我必须在所有数据上放置替换的东西。

$r_val=preg_replace('/(0)/','-',$r_val);

使用的代码正在替换它找到的所有零,例如。它甚至从104.67替换零,给出输出1-4.56这是错误的。我想要那些数值精确为零的数据,必须用' - '代替它所遇到的每一个零。 任何人都可以帮忙!!

$ r_val所具有的值的示例: -

10.31, 391.05, 113393, 15.31, 1000等。

4 个答案:

答案 0 :(得分:4)

这取决于您在$r_val内如何格式化数据,但一个好的开始就是尝试:

$r_val = preg_replace('/(?<!\.)\b0\b(?!\.)/', '-', $r_val);

其中\b是一个0长度的字符,表示“单词”的开头或结尾。

听起来很奇怪,但Perl regex documentation实际上非常适合解释preg_*函数的正则表达式部分,因为Perl是实际实现功能的地方。

答案 1 :(得分:1)

同样,如果你能提供一个$r_val字符串真实情况的例子,那将会更有帮助。

请注意\b匹配字边界,这也会将“0.75”之类的字符串转换为“-.75”。我想这不是一个理想的结果。

答案 2 :(得分:1)

虽然另一个答案确实有效,但对我来说似乎过于复杂。我认为你只需要在0的任一侧使用^和$ chars。

$r_val = preg_replace('/^0+$/', '&#45', $r_val);
  • ^表示正则表达式应该从行的开头匹配。
  • $表示正则表达式应该与行尾相匹配。
  • +表示匹配此模式1次或更多次

我将减号改为它的html代码等价。偏执狂,是的,但我们毕竟是在处理数字,所以我虽然扔了一个原始的减号可能不是最好的主意。

答案 3 :(得分:0)

为什么不这样做?


if ( $r_val == 0 )
    $r_val = '-';

您不需要使用正则表达式。事实上,出于性能原因,我建议不要这样做。上述操作比正则表达式解决方案快约20倍。

此外,PHP手册建议不要使用正则表达式进行简单替换:

  

如果您不需要花哨的替换规则(如正则表达式),则应始终使用此函数而不是ereg_replace()或preg_replace()。

http://us.php.net/manual/en/function.str-replace.php

希望有所帮助!