Preg替换为Spaces但只有一个空格

时间:2017-07-03 09:16:46

标签: php regex

好的,请考虑以下字符串:

"Hello How are you??"

我希望它能够回归:

"Hello_How_are_you"

但我的preg_replace就是这样:

preg_replace("/[^A-Za-z0-9]/","_",$string);

返回以下内容:

"Hello____How are you"

虽然很好,它摆脱了外国的特征,但留下了___的长线,看起来很难看。我理解为什么,因为它正在用_替换空格,我要求它做。但是,我想只输出_替换它的地方bookmark_params

我怎样才能解决这个问题,是用正则表达式还是其他方式完成的?

2 个答案:

答案 0 :(得分:4)

只需添加量词:++至少意味着之前的一项,尽可能多地抓住:

preg_replace("/[^A-Za-z0-9]+/","_",$string);

答案 1 :(得分:2)

这可以是替代正则表达式。

$str = "Hello    How are you??";
$op = preg_replace("/\s+/", "_", $str); // suggested by @Toto

//(or)

$op = preg_replace("/[\s]{1,}/", "_", $str);