作者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
※ 引述《dreamer.bbs@snow.ice.ntnu.edu.tw ( )》之銘言:
: 小弟剛接觸 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
推 LiloHuang:他是要後面的字串動態...看清楚 61.230.172.181 09/22 00:09
推 kornelius:抱歉沒看清楚. :) 61.223.100.79 09/22 00:29
→ kornelius:那就使用 s/$p/$e/eeg 吧 61.223.100.79 09/22 00:29
推 LiloHuang:不過用eval的確要小心..尤其input從web 61.230.172.181 09/22 00:30
→ LiloHuang:eg的方式還是不行的 你自己跑一次吧 61.230.172.181 09/22 00:31
→ kornelius:是 eeg , 我跑過了 :) 61.223.100.79 09/22 00:31
推 LiloHuang:能否貼一份code 來看看 61.230.172.181 09/22 00:35
→ LiloHuang:我總覺得有地方不對勁 61.230.172.181 09/22 00:36
推 LiloHuang:double eval 用法應該不能達到這個效果 61.230.172.181 09/22 00:39
推 kornelius:的確,不過如果只是單純要取代為 $1 就可 61.223.100.79 09/22 01:08
推 LiloHuang:嗯嗯^^" 61.230.172.181 09/22 01:13