(defconst regex-tests '(;; From GNU libc's runptests ("\\([a-c]*\\)\\{2,\\}" . "abcdefg") ;; Misc ("^[^a]*[^b]c$" . "xc") ("^[^ab]*[abc]c$" . "cc") ("^[abc]*[^ab]c$" . "cc") ("[éa]*" . "éaé") ("[1[:alpha:]]*" . "é1aé a") ("[1[:Multibyte:]]*" . "é1aé a") ("[1[:nonascii:]]*" . "é1aé a") ("[^é]+" . "é1aé a") ("\\(1+\\)\\{2\\}" . "11") ("1\\{2\\}" . "11") ("1\\{0,2\\}" . "111") ("1\\{1,2\\}" . "11") ("1\\{1,2\\}" . "111") ("\\(1\\)\\{2,4\\}" . "11") ("\\(1\\|1\\)\\{2,4\\}" . "11") ("\\(1\\|1\\)\\{2,4\\}" . "1") ("\\(\\(a\\)*\\(b\\)*\\)*" . "aabb") (".\\(..\\)f\\|1a.c" . "1abc") ("\\(\\(a*\\)*\\(b*\\)*\\)*" . "aba") ;; Tests that require shy-groups or non-greedy ops ("\\(?:\\(a*\\)*\\(b*\\)*\\)*" . "aba") ("[[:alpha:]]" . "a") )) (if (fboundp 'match-string) nil (defun match-string (n str) (if (match-end n) (substring str (match-beginning n) (match-end n))))) (defun regex-test () (interactive) (while regex-tests (message "%s %s - %s" (car (car regex-tests)) (cdr (car regex-tests)) (condition-case err (if (string-match (car (car regex-tests)) (cdr (car regex-tests))) (list (match-string 0 (cdr (car regex-tests))) (match-string 1 (cdr (car regex-tests))) (match-string 2 (cdr (car regex-tests))) (match-string 3 (cdr (car regex-tests))) (match-string 4 (cdr (car regex-tests)))) "No match") (error err))) (setq regex-tests (cdr regex-tests)))) (regex-test)