Thanks Driven Life

日々是感謝

emacs lisp で行頭&行末ではなく、文字列の先頭&末尾にある改行&白文字を削除

結論から

(replace-regexp-in-string "\\`\\(?:\\s-\\|\n\\)+\\|\\(?:\\s-\\|\n\\)+\\'" "" str)

経緯

"   \n  12345
hoge\nhoge
\n
hago  \n a  \n"

みたいな文字列を

"12345
hoge\nhoge
\n
hago  \n a"

てな感じで、先頭と末尾の空白や改行を取り除くってのをしたかった。

最初は

(replace-regexp-in-string "^\\(?:\\s-\\|\n\\)+\\|\\(?:\\s-\\|\n\\)+$" "" str)

とかしてたんだけど、これだと

"12345
hoge
hogehago
a"

ってなっちゃってた。複数行と見なし、行頭と行末の改行や空白を削除しちゃってるんだと思う。

で、最終的に最初のやつになりました。

これであってるかなー。一応できてるっぽいけど。

正規表現 意味
\` 文字列・バッファの先頭
^ 行頭
\' 文字列・バッファの末尾
$ 行末

もっとかっこいいのあったら教えて下さい。