それなら、「アドホックさ」と「再利用性」のあいだのどこかでバランスをとった解決方法を、その場で作り出すしかないんじゃないかと思う。
「直前のフィルタリングの結果を次のフィルタリングで上書きされないようにする方法」に関しては、とりあえずこんな方法しか思いつかないんですが、この程度の再利用性があればいいんじゃない? だめ?
(define (regexp-replace-delimiter-all* str . args)
(define delimiter "%%%")
(define (set-delimiter str)
(string-append
delimiter
(string-join (map x->string (string->list str)) delimiter)
delimiter))
(define (erace-delimiter str)
(regexp-replace-all (string->regexp delimiter) str ""))
(if (eq? (remainder (length args) 2) 1)
(error
"Need even args -- REGEXP-MATCH-REPLACE*"
args)
(if (null? args)
(erace-delimiter str)
(apply regexp-replace-delimiter-all*
(append
(list (regexp-replace-all
(car args)
str
(set-delimiter (cadr args))))
(cddr args))))))
gosh> (regexp-replace-delimiter-all* "abcde" #/a.*?c/ "xx" #/xd/ "zz")
=>"xxde"
0 件のコメント:
コメントを投稿