|
From: | Matt Wette |
Subject: | [potluck dish] the module (potluck regexc) |
Date: | Tue, 16 Feb 2016 05:30:18 -0800 |
The (potluck regexc) module provides a macro for throwing a string at a sequence of regular expressions, executing an associated body when a match is found. Attached are three files: * regexc.scm: the source code * regexc.texi: documentation * regexc.test: test code Regexp Utilities ---------------- -- Scheme Procedure: regexp-case str case ... [else body] Match the string STR against each CASE in turn. Each CASE is of the form ((pat VAR1 VAR2 ...) body) where pat is a regular _expression_ string literal, VAR1 ... are bound to the ordered list of matched subexpressions, and BODY is a sequence of expressions. If no match is found and the optional ELSE case exists, the associated body is executed, otherwise an error is signaled. The following example matches a string aginst either a simple variable name, or a simple variable name with an array reference, and returns a list with the variable name and the string index, or '"1"'. If no match is found, '#f' is returned. (define str "foo") (regexp-case str (("^([a-z]+)\\(([0-9]+)\\)$" var idx) (list var idx)) (("^([a-z]+)$" var) (list var "1")) (else #f)) ==> ("foo" "1") -- Scheme Procedure: make-string-matcher (str ...) case ... [else body] This is similar to 'regexp-case' but generates a procedure '(lambda (str ...) ...)' that matches its string argument STR againt each CASE in turn. (define my-matcher (make-string-matcher (str a b c) (("^([a-z]+)\\(([0-9]+)\\)$" var idx) (list var idx)) (("^([a-z]+)$" var) (list var "1")) (else #f)) |
regexc.scm
Description: Binary data
regexc.test
Description: Binary data
regexc.texi
Description: Binary data
[Prev in Thread] | Current Thread | [Next in Thread] |