dso-lex
dso-lex allows lexers to be defined using regular expressions a la cl-ppcre. A lexer will convert (or tokenize) a string into a list of tokens (consisting of a token-class and the token's image). For example:

(defun snip (s) (subseq s 1 (1- (length s))))

(defun un-squote (s) (regex-replace-all "''" (snip s) "'"))
(defun un-dquote (s) (regex-replace-all "\"\"" (snip s) "\""))

(deflexer scan-csv (:priority-only t)
  ("[^\"',]+" value)
  ("'(?:[^']|'')*'" value un-squote)
  ("\"(?:[^\"]|\"\")*\"" value un-dquote)
  ("," comma))

See the distribution for a more complete example.

ASDF-install package (obsolete) http://download.fugue88.ws/lex/dso-lex-0.3.2.tar.gz, or see the project page.