org2blogでのorg-roamのノードの投稿 を実装した際に得た知見を書き出す。
検索
正規表現での検索は re-search-forward
で行なう。この関数を実行するとカーソルが移動するため、 必要に応じて save-excursion
などで元のカーソル位置などを保存する。
下記をテスト用の文字列とする。(■はカーソル位置)
■abc-123-ABC
カーソル位置で下記のLispを実行する。
(defun test-search () (re-search-forward "\\(abc\\)-\\(123\\)-\\(ABC\\)"))
カーソルはマッチした正規表現の後部に移動する。
abc-123-ABC■
置換
テスト用の文字列の 123 を 456 に変換してみる。
(defun test-replace () (re-search-forward "\\(abc\\)-\\(123\\)-\\(ABC\\)") (replace-match "\\1-456-\\3"))
abc-456-ABC■
削除
削除はマッチした文字列を空文字に置換することで実現できる。
(defun test-delete-1 () (re-search-forward "\\(abc\\)-\\(123\\)-\\(ABC\\)") (replace-match ""))
また、マッチ部分の位置情報を利用しても可能である。
(defun test-delete-2 () (re-search-forward "\\(abc\\)-\\(123\\)-\\(ABC\\)") (delete-region (match-beginning 0) (match-end 0)))
match-beginning
と match-end
の引数は正規表現のグループ番号なので、それを指定することでグループ単位での位置情報も利用できる。 abc-123-ABC の 123 を削除するには下記のように指定する。
(defun test-delete-3 () (re-search-forward "\\(abc\\)-\\(123\\)-\\(ABC\\)") (delete-region (match-beginning 2) (match-end 2)))
abc--ABC■