好的,请考虑以下字符串:
"Hello How are you??"
我希望它能够回归:
"Hello_How_are_you"
但我的preg_replace
就是这样:
preg_replace("/[^A-Za-z0-9]/","_",$string);
返回以下内容:
"Hello____How are you"
虽然很好,它摆脱了外国的特征,但留下了___
的长线,看起来很难看。我理解为什么,因为它正在用_
替换空格,我要求它做。但是,我想只输出_
替换它的地方bookmark_params
。
我怎样才能解决这个问题,是用正则表达式还是其他方式完成的?
答案 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);