文字列が格納されたシンボルに対しての置換は、どう書くのでしょうか。
具体的に説明しますと、
(setq foo "h_o_g_e")
で定義されるシンボル foo に、JavaScriptでいうところの
foo.replace(/_/g, '.');
を適用させたいんですが、elispではこれをどう書けばいいのでしょうか、という質問です。
よろしくお願いします。
replace-regexp-in-stringがそのまま使えます。
もっとも、複雑な置換処理をするならばバッファに入れて処理するほうがよいでしょう。
(replace-regexp-in-string "_" "." "h_o_g_e") ; => "h.o.g.e"
バッファに対しての正規表現置換は簡単ですが、文字列に対して置換する関数は通常含まれていないように思います。
string-matchを使って書くなら、こんな感じでしょうか。
(defun string-replace-regexp (regexp to-string original-string) (if (string-match regexp original-string) (concat (substring original-string 0 (match-beginning 0)) to-string (do-replace regexp to-string (substring original-string (match-end 0)))) original-string))
このように使います。
(setq foo "h_o_g_e") (string-replace-regexp "_" "." foo) ; -> "h.o.g.e"
ご回答ありがとうございました!
Emacs-21.1 で新設された関数のようですね(他人のブログより)。
ちゃんと情報を追いかけないといけませんね。。反省