Regular Expressions in Clojure

Regular expression is a formal language that will allow you to find chunks of text that matches the patterns you specify. Following are a bunch of code examples which I've put together as a mini-reference for my own use.

In clojure you can define a regular expression using,

#"<patter>"

syntax.

To search for match in a string, you can use re-find, it will return either the match or a vector of matches if you have groups.

(re-find #"quick" "The quick brown fox jumps over the lazy dog")
;;"quick"

(re-find #"(f(oo bar))" "foo bar")
;;["foo bar" "foo bar" "oo bar"]

Like other data structures you can threat regex's as sequences too, re-seq will return a lazy sequence of matches.

(re-seq #"h" "The quick brown fox jumps over the lazy dog")
;;("h" "h")

If you are coming from java world one thing that will confuse you is that at first there seems to be no way to specify pattern flags such as,

  • DOTALL
  • MULTILINE
  • UNICODE\CASE

Instead of those flags you can use embedded flags.

  • Unix lines mode can enabled via (?d).
  • Case-insensitive mode can enabled via (?i).
  • Multiline mode can enabled via (?m).
  • Dotall mode can enabled via (?s).
  • Unicode-aware case folding can enabled via (?u).