On Wed, Jun 24, 2009 at 9:04 PM, Chouser<[email protected]> wrote:
> On Wed, Jun 24, 2009 at 6:13 PM, CuppoJava<[email protected]> 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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---