String Substitution Partially
发信人: Invader (政治局局长@real.complex.world), 信区: Perl
标 题: Re: 请教:字符串部分替代
发信站: 水木社区 (Fri Mar 20 13:52:47 2009), 转信
s/PATTERN/EXPR/e
标志e指示perl把EXPR作为表达式来求值,以求值结果作为替换字符串
如果待处理字符串中[]的位置固定,那么也可以直接对substr执行修改操作:
$str = "a [b c] d";
substr($str, 2, 5) =~ tr/ /-/; # $str 变为 "a [b-c] d"
下面是使用substr方法解决原问题的一种思路:
$str = "abc 123 [john jack jim jason] 8 8 8 [x y z]";
my ($a, $b) = (0, 0);
while ( ($a = index $_, "[", $b) >= 0
and ($b = index $_, "]", $a) >= 0 )
{
substr($_, $a, $b-$a+1) =~ tr/ /-/;
}
标 题: Re: 请教:字符串部分替代
发信站: 水木社区 (Fri Mar 20 00:48:18 2009), 转信
$str =~ s/\[([^][]*)\]/ ( my $data = $1 ) =~ s{\s+}{-}g ; "[$data]" /eg ;
累死我了
总体思想是找到 [ ] 之间的部分,然后用 s/\s+/-/g 替换 ,再返回
用了 /e ,
\[([^][]*)\] 即找到 [ ]之间的部分,但是内部不能嵌套 [ ] ,即单独的一对 []
用了字符类
【 在 LenovoX300 (Lenovo Thinkpad X300) 的大作中提到: 】
: 标 题: 请教:字符串部分替代
: 发信站: 水木社区 (Thu Mar 19 15:33:42 2009), 转信
:
: 比如有字符串:
: "abc 123 [john jack jim jason] 8 8 8 [x y z]"
: 如何把[]里面里面的所有空格变成-,最后变成
: "abc 123 [john-jack-jim-jason] 8 8 8 [x-y-z]"