2016-06-02 21 views
1

[img="image1"]something[/img]のようなBBコードを含む文字列があります。 そして、私はこのように見ているハッシュマップを持っています文字列内のすべての文字列をハッシュマップの値に置き換えます。

{:image1 "real_file_name.jpg"} 

実像パスが含まれています。私はすべて[img="XXX"]YYY[/img]<img src="real_path">.....</img>

と置き換えたいので、すべて[img=...]タグを見つけて、ハッシュマップから対応する値に置き換える必要があります。

私はこれをJavaなどの言語で行う方法を知っています。 Clojureでこれをどうすればできますか?

答えて

2

他の言語とまったく同じです:regexpで必要なすべてのイメージ構造を繰り返し探し、すべてのイメージの必要な部分をキャプチャして新しい文字列に置き換えます(キャプチャしたイメージIDをマップ): `keyword`何

user> (require '[clojure.string :as s]) 
nil 

user> (def input "[img=\"image1\"]something[/img] [img=\"image2\"]something[/img]") 
#'user/input 

user> (def paths {:image1 "real/path1" :image2 "real/path2"}) 
#'user/paths 

user> (s/replace input #"\[img=\"(.+?)\"\](.*?)\[/img\]" 
       (fn [[_ img-id content]] 
        (str "<img src=\"" (paths (keyword img-id)) "\">" 
         content "</img>"))) 
"<img src=\"real/path1\">something</img> <img src=\"real/path2\">something</img>" 
+0

あなたは、このように正規表現と交換機能をclojure.string/replaceを使用することができますか? –

+0

'keyword'は文字列をキーワードに変換する関数です。'(keyword "some-value") '=>':some-value'です。一致するのは文字列であり、マップキーはキーワードであるため、マッチをキーワードに変換してマップ内で検索する必要があります – leetwinski

関連する問題