Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换php中的精确匹配_Php_Mysql_Regex - Fatal编程技术网

替换php中的精确匹配

替换php中的精确匹配,php,mysql,regex,Php,Mysql,Regex,我不熟悉php中的正则表达式 我有一些数据,其中一些值存储为零(0)。我要做的是将它们替换为“-”。我不知道随着我的数据库表每天更新,哪个值会变为零,这就是为什么我必须在所有数据上放置替换内容的原因 $r_val=preg_replace('/(0)/','-',$r_val); 我使用的代码正在替换它为例如找到的所有零。它甚至将104.67中的零替换为零,给出了错误的输出1-4.56。我希望数据的值是精确的零,必须用“-”代替,而不是它遇到的每一个零。 有人能帮忙吗 $r_val具有的值示例

我不熟悉php中的正则表达式

我有一些数据,其中一些值存储为零(0)。我要做的是将它们替换为“-”。我不知道随着我的数据库表每天更新,哪个值会变为零,这就是为什么我必须在所有数据上放置替换内容的原因

$r_val=preg_replace('/(0)/','-',$r_val);
我使用的代码正在替换它为例如找到的所有零。它甚至将104.67中的零替换为零,给出了错误的输出1-4.56。我希望数据的值是精确的零,必须用“-”代替,而不是它遇到的每一个零。 有人能帮忙吗

$r_val具有的值示例:-

10.31, 391.05, 113393, 15.31,
1000等。

这在很大程度上取决于您的数据在
$r_val
中的格式,但最好从以下方面开始:

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

$r_val=preg_replace('/(?这在很大程度上取决于您的数据在
$r_val
中的格式,但最好从以下方面开始:

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

$r_val=preg_replace('/(?)同样,如果您能提供一个示例说明
$r_val
字符串的真实外观,那将非常有用


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

同样,如果您能提供一个示例说明
$r\u val
字符串的真实外观,这将非常有用


请注意,
\b
在单词边界处匹配,这也会将“
0.75
”这样的字符串变成“
-.75
”。我想这不是一个理想的结果。

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

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

我把减号改成了html代码。是的,我有点偏执,但我们毕竟是在处理数字,所以我认为在其中加入一个原始的减号可能不是最好的主意。

虽然另一个答案确实有效,但对我来说似乎太复杂了。我想你只需要在0的两边使用^chars和$chars

$r_val = preg_replace('/^0+$/', '&#45', $r_val);
  • ^指示正则表达式应从行首开始匹配
  • $表示正则表达式应与行尾匹配
  • +表示匹配此模式1次或多次
我把减号改成了html代码。是的,我有点偏执,但我们毕竟是在处理数字,所以我觉得在里面放一个原始的减号可能不是最好的主意。

为什么不这样做呢


if ( $r_val == 0 )
    $r_val = '-';
您不需要为此使用正则表达式。事实上,出于性能原因,我建议不要这样做。上面的操作大约比正则表达式解决方案快20倍

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

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

希望有帮助!

为什么不这样做呢


if ( $r_val == 0 )
    $r_val = '-';
您不需要为此使用正则表达式。事实上,出于性能原因,我建议不要这样做。上面的操作大约比正则表达式解决方案快20倍

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

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



希望有帮助!

什么是$r\u val的格式?$r\u val的浮点类型值支持我的解决方案。基本上是一样的,但它使用“向前看”和“向后看”来确保两边的0旁边都没有句点。因此,5.0和0.5都应该正确保留。感谢matthew,它解决了我的问题=)$r_val的格式是什么?$r_val的浮点类型值支持我的解决方案。基本上是一样的,但它使用“向前看”和“向后看”来确保两边的0旁边没有句点。因此,5.0和0.5都应该正确保留。感谢matthew,它解决了我的问题=)我不确定\b是否应用于数字,但显然它确实如此。:)替代模式可以使用前瞻和后顾断言的组合。“#”(?我不确定\b是否应用于数字,但显然它确实如此。:)替代模式可以使用前瞻和后顾断言的组合。”#(?是的,你是对的,它替换了我不想要的o。我编辑了我的问题,你可以在那里查找$r_val拥有的值的示例。是的,你是对的,它替换了我不想要的o。我编辑了我的问题,你可以在那里查找$r_val拥有的值的示例!=0,从他所说的更可能持有“5.0,34.05,23.4”的他说:“我有一些数据,其中一些值存储为零(0)。我想做的是用“-”替换它们,因此存储为0的那些值(即,$rval==0)换成“-”,其他人就不用管了。不需要正则表达式。我同意,如果是这样的话,但是……如果是的话,那么他为什么要问正则表达式呢?当然,人们在知道正则表达式存在之前就知道$rval==0了……也许有人建议他使用正则表达式,然后他来这里寻求帮助。我不知道。考虑到他最初的追求ion,虽然,我的解决方案足够快。如果他没有提到其他要求,那么这可能会改变。mike,我没有任何其他要求,你在解决方案中给出的代码正是我之前所做的,但我被告知使用regex更好。soi适用于regex。我不知道这个简单的代码e比regex快。谢谢你的信息人!!$r_val!=0,但据他所说,可能性更大