Just tried again - using lein repl (clojure 1.4.0) and it worked fine.

It was late - who knows what I did ;-)

Thanks for checking guys.

On Saturday, 20 April 2013 02:37:14 UTC+2, Andy Fingerhut wrote:
>
> I fired up a Clojure 1.5.1 REPL, did (require '[clojure.string :as s]) 
> first, then copied and pasted those two function definitions, and did not 
> get the errors you are seeing.  I don't have a good guess why you are 
> getting those errors.  Did you do the require first?  What version of 
> Clojure are you using?
>
> Andy
>
>
> On Fri, Apr 19, 2013 at 5:17 PM, Mond Ray <mondr...@gmail.com<javascript:>
> > wrote:
>
>> Old thread but what the heck... it doesn't work in my REPL
>>
>> user=> (defn key-pattern
>>   #_=>     "Create a regex Pattern of the form '<key1>|<key2>', the key 
>> names
>>   #_=> will be quoted in case they contain special regex characters"
>>   #_=>     [m]
>>   #_=>     (->> (keys m)
>>   #_=>         (map #(java.util.regex.Pattern/quote (name %)))
>>   #_=>         (s/join "|")
>>   #_=>         java.util.regex.Pattern/compile))
>> #'user/key-pattern
>> user=> 
>>
>> user=> (defn replace-map [text m]
>>   #_=>     (s/replace text
>>   #_=>        (key-pattern m)
>>   #_=>        (fn [field-name]
>>   #_=>           (java.util.regex.Matcher/quoteReplacement (str (get m
>>   #_=> (keyword field-name)))))))
>> #'user/replace-map
>> user=> (replace-map "/path/:p0/b/:p1" {:p0 "1" :p1 "2"})
>> ClassCastException java.lang.String cannot be cast to clojure.lang.IFn 
>>  user/key-pattern/fn--408 (NO_SOURCE_FILE:6)
>>
>> user=> (key-pattern {:a 1})
>> ClassCastException java.lang.String cannot be cast to clojure.lang.IFn 
>>  user/key-pattern/fn--408 (NO_SOURCE_FILE:6)
>>
>> Am I doing something wrong or is there a typo in your code?
>>
>>
>>
>> On Tuesday, 15 March 2011 16:35:04 UTC+1, Aaron Cohen wrote:
>>
>>> On Mon, Mar 14, 2011 at 2:17 PM, Daniel Solano Gomez
>>> <clo...@sattvik.com> wrote:
>>> > On Mon Mar 14 13:02 2011, shuaybi2 shuaybi2 wrote:
>>> >> I have a string such as:
>>> >>
>>> >> "select * from account where acctId = _ACCT-ID_ and acctTyp = 
>>> _ACCT-TYP_"
>>>
>>> There are several clojure libraries that exist to improve the ease and
>>> safety of doing something like this. Amongst them are
>>> clojure.contrib.sql and ClojureQL, which take different approaches.
>>> They all should be sufficient to guard against SQL injection and
>>> should probably be the first place you look.
>>>
>>> For the more general question you were asking about how to generically
>>> replace a map of matches-to-replacements though, Daniel did a good job
>>> showing how to use a reduce over the map. That method will call
>>> "replaceAll" once per entry in the map, which is probably fine if you
>>> don't have many substitutions.
>>>
>>> Another way to do it is using clojure.string.replace, which has an
>>> often-overlooked third overload which matches with a regex and
>>> replaces with a "mapping function."
>>>
>>> Starting with a simple example:
>>> user=>(require '[clojure.string :as s])
>>> nil
>>> user=>(s/replace "a b a" #"a|b" {"a" "1" "b" "2"})
>>> "1 2 1"
>>>
>>> In the example, the map was being used as a "replacement function".
>>>
>>> ---
>>> If you're willing to change your map to use strings as keys and
>>> values, then the previous example is good enough.
>>>
>>> Otherwise, because you're wanting to use keywords as your keys, and
>>> arbitratry values for your values, we'll need to use a slightly more
>>> sophisticated replacement function.
>>>
>>> (defn key-pattern
>>>     "Create a regex Pattern of the form '<key1>|<key2>', the key names
>>> will be quoted in case they contain special regex characters"
>>>     [m]
>>>     (->> (keys m)
>>>         (map #(java.util.regex.Pattern/**quote (name %)))
>>>         (s/join "|")
>>>         java.util.regex.Pattern/**compile))
>>>
>>> (defn replace-map [text m]
>>>     (s/replace text
>>>        (key-pattern m)
>>>        (fn [field-name]
>>>           (java.util.regex.Matcher/**quoteReplacement (str (get m
>>> (keyword field-name)))))))
>>>
>>>  -- 
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clo...@googlegroups.com<javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+u...@googlegroups.com <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to clojure+u...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>  
>>  
>>
>
>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to