--- tromey_at_busco.lanl.gov Member, League for Programming Freedom Sadism and farce are always inexplicably linked. -- Alexander Theroux ;; ;; regexp.scm -- More interfaces to regular expressions. ;; tromey Fri Jul 29 1994 ;; ;; TO DO: ;; make this work in other schemes. (if (not (symbol-bound? 'string->regexp)) ;; Must load package. (load "sregexp.so")) ;; ;; Do a regular expression match of REGEXP against STRING. On match, ;; follow instructions in SUBST to rewrite string. Return new string. ;; SUBST is a list whose elements are in one of three forms: ;; 1. A string. The string is appended to the result. ;; 2. An integer, n. The nth sub-match is appended. ;; 3. A procedure. The procedure is called with the match result and ;; the string as arguments. The return result of the procedure is ;; appended. ;; ;; regexp-substitute returns the result string, or #f if no match. ;; ;; regexp-substitute-all is like regexp-substitute, but it works on ;; all matching substrings. ;; FIXME do this so that the functions share an environment. Is there ;; a better way? (define regexp-substitute #f) (define regexp-substitute-all #f) (let ;; subst-match does one substitution, given a match, a string, and ;; a substitution list. ((subst-match (lambda (match string subst) (apply string-append (map (lambda (what) (cond ((string? what) what) ((procedure? what) (what match string)) ((integer? what) (substring string (match-beginning match what) (match-end match what))) (else ;; This will force an error in ;; string-append. #f))) subst))))) (set! regexp-substitute (lambda (regexp string subst) (let ((match (regexp string))) (if match (subst-match match string subst) #f)))) (letrec ;; do-subst does the work for regexp-substitute-all ((do-subst (lambda (regexp string subst) (let ((match (regexp string))) (if match (append (list (substring string 0 (match-beginning match 0)) (subst-match match string subst)) (do-subst regexp (substring string (match-end match 0) (string-length string)) subst)) (list string)))))) (set! regexp-substitute-all (lambda (regexp string subst) (apply string-append (do-subst regexp string subst)))))) ;; ;; Return a regular expression string that matches STRING exactly, and ;; nothing else. ;; (define regexp-quote (let ((regexp (string->regexp "[][\\|.?+*()]"))) (lambda (string) (regexp-substitute-all regexp string '("\\" 0)))))Received on Sat Sep 24 1994 - 23:14:20 CEST
This archive was generated by hypermail 2.3.0 : Mon Jul 21 2014 - 19:38:59 CEST