どう書く?org 税込み価格への修正 を common lispで

つぎは税込み価格への修正
・・・lisp正規表現ライブラリしらん。
・・・lispでの回答を先に見てしまった。まぁいいや。
cl-ppcreというのがあるのか。あとは調べて頑張る。
cl-ppcreのリファレンスは↓ここ
http://weitz.de/cl-ppcre/
おお。結構便利だ。
試した過程も載せとく。恥ずかしいけど。

;;税込み価格への修正

(require 'cl-ppcre)
(use-package "CL-PPCRE")

(defun test0 ()
  (regex-replace "fo+" "foo bar" "fob"))

(defun test1 ()
  (regex-replace "fo+" "foooooo bar" "fob"))

;;case sensitiveらしい
(defun test2 ()
  (regex-replace "fo+" "FOO bar" "frob"))

;;(?i)でcase insensitiveになる
(defun test3()
  (regex-replace "(?i)fo+" "FOO bar" "frob"))

;;大文字小文字を残す
(defun test4()
  (regex-replace "(?i)fo+" "FOO bar" "frob" :preserve-case t))

(defun test5()
  (regex-replace "(?i)fo+" "Foo bar" "frob" :preserve-case t))

;;\\&でマッチした文字列がとれる??
(defun test6()
  (regex-replace "bar" "foo bar baz" "'\\&'"))

(defun test7()
  (regex-replace "bo+" "foo booooo baz" "\\&"))

;;\\`でマッチするまでの文字列がとれる??
(defun test8()
  (regex-replace "bo+" "foooo aaa eee boooo baaaa" "\\`"))

;;\\'でマッチしたもの以降の文字列がとれる??
(defun test9()
  (regex-replace "bo+" "foo booo baaa" "\\'"))

::\\nで番目にマッチした文字列がとれる
(defun test9+()
  (regex-replace "(fo+)(bo+)(ba+)" "fooobooobaaa" "\\1.\\2.\\3"))
;;リストで指定
(defun test10()
  (regex-replace "bar" "foo bar baz"
         '("[マッチ:" :match " マッチ前:" :before-match " マッチ後:" :after-match "]")))

;;さて本番

;;matchにはマッチした文字列が入ってくる
(defun test11()
  (regex-replace "(ab).*(cd).*(ef)"
         "xxxxxabcdefxxxxx"
         #'(lambda (match &rest registers)
             (format nil "[~A]" match registers))
             :simple-calls t))

;;resistersにはマッチした文字列がリストになってはいってるっぽい
(defun test12()
  (regex-replace "(ab)(cd)(ef)"
         "xxxxxabcdefxxxxx"
         #'(lambda (match &rest registers)
             (format nil "[~A]" registers))
             :simple-calls t))

;;regex-replaceは残ってても置換をやめちゃう
(defun test13()
  (regex-replace "(ab)(cd)(ef)"
         "----abcdef|||||||||abcdef____"
         #'(lambda (match &rest registers)
             (format nil "~A" registers))
             :simple-calls t))

;;というわけでregex-replace-all
(defun replace-kakaku(target)
  (regex-replace-all "\\d+"
         target
         #'(lambda (match &rest registers)
             (format nil "~A" (write-to-string (truncate (* (parse-integer match) 1.05)))))
         :simple-calls t))