为什么这个例子不起作用:
$string='1000000000000';
while($string=preg_replace('/(\d)((\d\d\d)+\b)/','$1,$2',$string)){}
echo $string."<br>";
它认为循环是重复的,直到不再匹配。 直到正则表达式失败。但不,循环永远不会结束。
这个替代方案有效:
$string='10000000000000';
while(preg_match("/(\d)((\d\d\d)+\b)/",$string)){
$string=preg_replace("/(\d)((\d\d\d)+\b)/","$1,$2",$string);
}
echo $string."<br>";
我的问题是: 当正则表达式仍然无法匹配时,preg_replace函数返回一些TRUE / FALSE值? 如果返回False,为什么在第一个例子中循环永远不会停止。 我试过:
while((regex)!==FALSE)
while((regex)==TRUE)
它不起作用。
我不在乎如何放逗号, 我想知道preg_replace函数
如果有人可以帮助我。 会很好。 感谢
答案 0 :(得分:4)
preg_replace()
$count
的可选第五个参数应用于跟踪已进行的替换次数。
你的循环看起来像
do {
$string = preg_replace('/(\d)((\d\d\d)+\b)/','$1,$2', $string, 1, $count);
} while ($count);
或者,或者,这个正则表达式将一步完成工作
$string = preg_replace('/(?!^)(?=(?>\d{3})+$)/', ',', $string);
答案 1 :(得分:1)
来自manual:
如果找到匹配项,将返回新主题,否则主题将保持不变,如果发生错误,则返回NULL。
因此,只要没有错误发生,您的作业将始终评估为true
(字符串的评估结果为true
)。
您可以做的是将回报值与主题进行比较,如果它们相同,则找不到匹配项:
while ($string != preg_replace('/(\d)((\d\d\d)+\b)/','$1,$2',$string))
{
// a match was found
}
答案 2 :(得分:1)
If matches are found, the new subject will be returned, otherwise subject will be returned unchanged or NULL if an error occurred.
http://php.net/manual/en/function.preg-replace.php
所以,代码需要是:
while(($string=preg_replace('/(\d)((\d\d\d)+\b)/','$1,$2',$string)) !== $string){}
......我想......甚至不确定这是否是有效的PHP ......