On Wed, Jun 24, 2009 at 9:04 PM, Chouser<chou...@gmail.com> wrote:
> On Wed, Jun 24, 2009 at 6:13 PM, CuppoJava<patrickli_2...@hotmail.com> wrote:
>>
>> I need to dynamically create a regex, and would really like to be able
>> to use Clojure's built-in regex syntax. But I don't know how to go
>> about it.
>>
>> My regex is: #"(.*?)(\(image .*)"
>>
>> except instead of "image", I need to dynamically insert an array of
>> possible strings to match.
>>
>> ie. given ["image" "buffer" "spacer"]
>>
>> I need to produce #"(.*?)(\((?:image|buffer|spacer) .*)"
>
> Here the best I've come up with for your example:
>
> (use '[clojure.contrib.str-utils :only [str-join]])
>
> (defn my-regex [words]
>  (re-pattern (str #"(.*?)"   ; stands alone, so #"" works
>                   "(\\((?:"  ; regular string, so \ must be escaped
>                     (str-join "|" words)
>                   ").*)")))

Had another thought:

(defn my-regex [words]
  (re-pattern
    (.replace (str #"(.*?)(\((?:WORDS).*)")
              "WORDS"
              (str-join "|" words))))

user=> (my-regex ["image" "buffer" "spacer"])
#"(.*?)(\((?:image|buffer|spacer).*)"

That lets you use express more of the regex inside a #"",
though whether it's easier to understand in the end I'll
leave to you to decide.

--Chouser

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to