作者kornelius (Kornelius)
看板Programming
标题Re: 想请教一下 perl 中的字串取代
时间Sat Sep 22 00:07:30 2007
eval 少用,建议使用 qr{ pattern }
譬如
$pattern = qr/^a\/(.*)/;
比对时,可直接使用,如:
$str =~ s/$pattern/$1/g;
透过 qr 操作子可把 pattern 存起来,在呼叫的时候就不会有样式编译的问题 ( 请参阅
Programming Perl 样式比对章节 )
或参阅 Perldoc
http://perldoc.perl.org/perlretut.html
http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators
http://perldoc.perl.org/perlop.html#qr%2fSTRING%2fimosx
※ 引述《[email protected] ( )》之铭言:
: 小弟刚接触 perl,有点问题想麻烦各位先进帮忙解答一下:
: 我知道在 perl 中可以用 s/pattern/replacement/ 来取代字串,
: 若原始字串是 "a/bcde/f", 若在程式码中以 s/^a\/(.*)/c\1d/ 进行取代
: 结果会变成 "cbcde/fd"
: 但是若我想把 pattern 跟 replacement 放在变数里,
: 比方说
: $pat = "^a\/(.*)";
: $rep = "c\1d";
: 然後以 s/$pat/$rep/ 来进行取代的操作,
: 结果会得到 "c\1d"
: 因为我需要由档案中将 pattern 与 replacement 的规则读进来,
: 该如何做才能得到与第一种写法一样的结果呢?
: 希望各位先进能拨空稍微指点一下,感恩! =)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.223.100.79
1F:推 LiloHuang:他是要後面的字串动态...看清楚 61.230.172.181 09/22 00:09
2F:推 kornelius:抱歉没看清楚. :) 61.223.100.79 09/22 00:29
3F:→ kornelius:那就使用 s/$p/$e/eeg 吧 61.223.100.79 09/22 00:29
4F:推 LiloHuang:不过用eval的确要小心..尤其input从web 61.230.172.181 09/22 00:30
5F:→ LiloHuang:eg的方式还是不行的 你自己跑一次吧 61.230.172.181 09/22 00:31
6F:→ kornelius:是 eeg , 我跑过了 :) 61.223.100.79 09/22 00:31
7F:推 LiloHuang:能否贴一份code 来看看 61.230.172.181 09/22 00:35
8F:→ LiloHuang:我总觉得有地方不对劲 61.230.172.181 09/22 00:36
9F:推 LiloHuang:double eval 用法应该不能达到这个效果 61.230.172.181 09/22 00:39
10F:推 kornelius:的确,不过如果只是单纯要取代为 $1 就可 61.223.100.79 09/22 01:08
11F:推 LiloHuang:嗯嗯^^" 61.230.172.181 09/22 01:13