可以用一个替换实现过滤空格么?

可以用一个替换实现过滤空格么?

对输入字符串的处理要求:
1. 去掉开头和结尾的空格
2. 中间连续两个或两个以上空格 替换成一个空格

$input=~s/(^\s+)|(\s+$)//g;
$input=~s/\s(\s+)/ /g;         

请教各位,是否能用一个替换完成上面的操作?


[Copy to clipboard] [ - ]
CODE:
$input=~s/(^\s+)|(\s+$)|(\s{2,})//g;



QUOTE:
原帖由 hitsubunnu 于 2008-10-27 18:00 发表

$input=~s/(^\s+)|(\s+$)|(\s{2,})//g;

\s{2,}要替换成一个空格。
感觉楼主说的不太可能,因为一个是替换成空,一个要替换成空格。
就算是可以,使用 | 的效率也要比多个 s 要低得多。
所以还是直接使用多个 s 命令来吧,效率高而且可读性好。
看楼下吧

修改后如下

[Copy to clipboard] [ - ]
CODE:
$input =~ s/^\s+|\s+$|(\s)\s+/$1/g;



QUOTE:
原帖由 hitsubunnu 于 2008-10-27 22:32 发表
修改后如下

$input =~ s/^\s+|\s+$|(\s)\s+/$1/g;

高!
$input = join ' ', split ' ', $input;

正则表达式好是好,就是可读性差了些。
用函数多好呀。不过 split 的可读性也就那样。语义太杂。

$str =~ s/(^\s+)|(\s+$)|((?<=\s)\s+)//g;

  改了一下 没有warning了