I'm all straightened out. Thanks everyone. Very helpful.
On Dec 3, 3:18 pm, Chouser <[EMAIL PROTECTED]> wrote:
> On Wed, Dec 3, 2008 at 2:57 PM, Blaine <[EMAIL PROTECTED]> wrote:
>
> > I want to build a regular expression pattern literal (I think that's
> > what they're called) like #"a.*" out of separate strings like "a" and
> > ".*".
>
> > user> (re-seq #"a.*" "bab") ; this is cool
> > ("ab")
> > user> (re-seq #(str "a" ".*") "bab") ; but this, in all its noobness, is
> > not
> > ; Evaluation aborted.
> > user> #(str "a" ".*")
> > #<user$eval__4569$fn__4571 [EMAIL PROTECTED]> ; what
> > is this thing? can I use it somehow?
>
> It's a function! You could have built the same thing like this:
> user=> (fn [] (str "a" ".*"))
> #<user$eval__42$fn__44 [EMAIL PROTECTED]>
>
> You can use it, but it has nothing to do with regex:
> user=> (def thing #(str "a" ".*"))
> #'user/thing
> user=> (thing)
> "a.*"
>
> It's just a function that returns a literal string. A "regex" in
> Clojure/Java is actually a java.util.regex.Pattern:
> user=> (class #"")
> java.util.regex.Pattern
>
> To programmatically build one, you'll have to use that class directly,
> or 're-pattern':
> user=> (doc re-pattern)
> -------------------------
> clojure.core/re-pattern
> ([s])
> Returns an instance of java.util.regex.Pattern, for use, e.g. in
> re-matcher.
> nil
> user=> (re-pattern (str "a" ".*"))
> #"a.*"
>
> ...so back to your original example:
> user=> (re-seq (re-pattern (str "a" ".*")) "bab")
> ("ab")
>
> But remember that you may need extra backslashes inside the "string"
> parts, compared to the equivalent #"regex" literal.
>
> Or if each piece of your regex can stand alone, you could take
> advantage of the fact that the .toString method on Pattern returns a
> sufficiently escaped string:
>
> user=> (re-seq (re-pattern (str #"s" #"\w*")) "sue sang a song")
> ("sue" "sang" "song")
>
> --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
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
-~----------~----~----~----~------~----~------~--~---