我是php中正则表达式的新手。
我有一些数据,其中一些值存储为零(0)。我想要做的是用' - '替换它们。我不知道哪个值会变为零,因为我的数据库表每天都会更新,这就是为什么我必须在所有数据上放置替换的东西。
$r_val=preg_replace('/(0)/','-',$r_val);
使用的代码正在替换它找到的所有零,例如。它甚至从104.67替换零,给出输出1-4.56这是错误的。我想要那些数值精确为零的数据,必须用' - '代替它所遇到的每一个零。 任何人都可以帮忙!!
$ r_val所具有的值的示例: -
10.31, 391.05, 113393, 15.31, 1000等。
答案 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+$/', '-', $r_val);
我将减号改为它的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
希望有所帮助!