一行中连续多于一个空格替换成横线正则表达式如何写啊


Lonki说的tr/ /-/ 更简洁明了
我想补充问一个问题:
同样的空格替换问题
my $str = "hello     chinaUnix i am wang  !";
替换要求:单独的空格保留,连续空格替换成连续-
即:
hello-----chinaUnix i am wang---!
试了半天还是不会
我是这样写的$str =~ s/(\s+)/if (length($1) == 1) {\s} else {'_'x length($1)}/eg;
可惜报错,呵呵
还请指点

弄出来了
$str =~ s/(\s+)/length($1) == 1 ? $1 : '_' x length($1)/eg;

这样就可以了,虽然这个问题上比 s/(\s{2,})// 要麻烦,呵呵



QUOTE:
原帖由 CU_wanglijun 于 2008-1-18 11:25 发表
我想补充问一个问题:
同样的空格替换问题
my $str = "hello     chinaUnix i am wang  !";
替换要求:单独的空格保留,连续空格替换成连续-
即:
hello-----chinaUnix i am wang---!
试了半天还是不会
...

$str=~s/(\s{2,})/"-" x length($1)/eg;
多谢楼上,忽略这一点了,呵呵


QUOTE:
s/(\s+)/'-' x length($1)/eg

翻了下大骆驼,电子版的,呵呵,眼睛都找花了,没有看到"/e",请问这个/e是什么含义?谢谢!
回楼上
把替换部分当成一个表达式计算
可能不全面
大骆驼:

QUOTE:
/e 修饰词把 REPLACEMENT 当作一个 Perl 代码块,而不仅仅是一个替换的字串。执行这段代码后得出的结果当作替换字串使用。

谢谢兄弟!