(load-relative "loadtest.ss") (Section 'rx) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define (test-regexp result pattern input) (test result regexp-match pattern input) (test result regexp-match (bytes-append #"(?:" pattern #")") input) (test result regexp-match (bytes-append #"(?:(?:" pattern #"))") input) (test (and result (cons (car result) result)) regexp-match (bytes-append #"(?:(" pattern #"))") input) (test result regexp-match (bytes-append #"(?:)" pattern #"") input) (test result regexp-match (bytes-append #"(?<=)" pattern #"") input) (test result regexp-match (bytes-append #"(?:^|(?<=.))" pattern #"") input) (test result regexp-match (bytes-append #"" pattern #"(?=)") input) (test result regexp-match (bytes-append #"" pattern #"(?:$|(?=.))") input) (test (and result (cons (car result) result)) regexp-match (byte-pregexp (bytes-append #"(?=(" pattern #"))\\1")) input) (test result regexp-match (bytes-append #"(?>" pattern #")") input) ) ;; For when adding "x"s to the beginning and end shouldn't change the result: (define (test-regexp-x result pattern input) (test-regexp result pattern input) (test-regexp result pattern (bytes-append #"xxx" input #"xxx")) ) (test-regexp-x '(#"a") #"a" #"abc") (test-regexp '(#"a") #"^a" #"abc") (test-regexp-x '(#"b") #"b" #"abc") (test-regexp-x #f #"b$" #"abc") (test-regexp-x '(#"c") #"c" #"abc") (test-regexp-x #f #"^c" #"abc") (test-regexp '(#"c") #"c$" #"abc") (test-regexp '(#"a") #"." #"abc") (test-regexp '(#"a") #"^." #"abc") (test-regexp-x '(#"a") #"[a-b]" #"abc") (test-regexp '(#"b") #"[^a]" #"abc") (test-regexp '(#"c") #"[^ab]" #"abc") (test-regexp '(#"c") #"[^a-b]" #"abc") (test-regexp '(#"c") #".$" #"abc") (test-regexp '(#"a") #".?" #"abc") (test-regexp '(#"a") #"a?" #"abc") (test-regexp '(#"a") #"a*" #"abc") (test-regexp '(#"a" #"a") #"(a)?" #"abc") (test-regexp '(#"a" #"a") #"(a)*" #"abc") (test-regexp-x '(#"") #"b?" #"abc") (test-regexp-x '(#"b") #"b+" #"abc") (test-regexp-x '(#"b") #"b+?" #"abc") (test-regexp-x '(#"") #"b*" #"abc") (test-regexp-x '(#"c") #"c+" #"abc") (test-regexp-x '(#"c") #"c+?" #"abc") (test-regexp-x '(#"") #"c*" #"abc") (test-regexp-x '(#"ab") #"ab" #"abc") (test-regexp-x '(#"ab" #"a" #"b") #"(a)(b)" #"abc") (test-regexp '(#"ab" #"a" #"b") #"(a)*(b)*" #"abc") (test-regexp-x '(#"bc") #"bc" #"abc") (test-regexp '(#"ab") #".." #"abc") (test-regexp-x '(#"abc") #".bc" #"abc") (test-regexp '(#"abc") #"..*" #"abc") (test-regexp '(#"abc") #"[a-c]*" #"abc") (test-regexp-x '(#"abc") #"[a-c]+" #"abc") (test-regexp '(#"abc") #".*" #"abc") (test-regexp-x '(#"") #".*?" #"abc") (test-regexp '(#"abc") #".*?c" #"abc") (test-regexp '(#"abc") #".+" #"abc") (test-regexp '(#"a") #".+?" #"abc") (test-regexp '(#"abc") #".+?c" #"abc") (test-regexp-x '(#"abc") #"(?:a|b)*c" #"abc") (test-regexp '(#"abc") #"(?:a|b|c)*" #"abc") (test-regexp '(#"abc") #"(?:a|(?:b|c))*" #"abc") (test-regexp '(#"") #"(?:b|c)*" #"abc") (test-regexp-x '(#"abc") #"(?:a|b)+c" #"abc") (test-regexp-x '(#"abc") #"(?:a|b|c)+" #"abc") (test-regexp-x '(#"abc") #"(?:a|(?:b|c))+" #"abc") (test-regexp-x '(#"bc") #"(?:b|c)+" #"abc") (test-regexp-x '(#"abc" #"b") #"(a|b)*c" #"abc") (test-regexp '(#"abc" #"c") #"(a|b|c)*" #"abc") (test-regexp '(#"abc" #"c" #"c") #"(a|(b|c))*" #"abc") (test-regexp '(#"abc" #"c" #"b") #"((a|b)|c)*" #"abc") (test-regexp '(#"" #f) #"(b|c)*" #"abc") (test-regexp-x '(#"abc" #"b") #"(a|b)+c" #"abc") (test-regexp-x '(#"abc" #"c") #"(a|b|c)+" #"abc") (test-regexp-x '(#"abc" #"c" #"c") #"(a|(b|c))+" #"abc") (test-regexp-x '(#"abc" #"c" #"b") #"((a|b)|c)+" #"abc") ;; Make sure we hit all types of ranges, with and without regstart: ;; EXACT1: (test-regexp-x '(#"a") #"a" #"a") (test-regexp-x #f #"a" #"b") (test-regexp '(#"aaa") #"a*" #"aaa") (test-regexp-x '(#"") #"a*" #"bbb") (test-regexp-x '(#"a") #"q?a" #"a") (test-regexp-x #f #"q?a" #"b") ;; RANGE: (test-regexp-x '(#"a") #"[a-b]" #"a") (test-regexp-x '(#"b") #"[a-b]" #"b") (test-regexp-x #f #"[a-b]" #"c") (test-regexp '(#"aba") #"[a-b]*" #"abac") (test-regexp-x '(#"") #"[a-b]*" #"cbbb") (test-regexp-x '(#"a") #"q?[a-b]" #"a") (test-regexp-x '(#"b") #"q?[a-b]" #"b") (test-regexp-x #f #"q?[a-b]" #"c") ;; NOTRANGE: (test-regexp '(#"a") #"[^c-d]" #"a") (test-regexp '(#"b") #"[^c-d]" #"b") (test-regexp #f #"[^c-d]" #"c") (test-regexp '(#"aba") #"[^c-d]*" #"abac") (test-regexp '(#"") #"[^c-d]*" #"cbbb") (test-regexp '(#"a") #"q?[^c-d]" #"a") (test-regexp '(#"b") #"q?[^c-d]" #"b") (test-regexp #f #"q?[^c-d]" #"c") ;; ANYOF: (test-regexp '(#"a") #"[ad]" #"a") (test-regexp '(#"d") #"[ad]" #"d") (test-regexp #f #"[ad]" #"c") (test-regexp '(#"ada") #"[ad]*" #"adac") (test-regexp '(#"") #"[ad]*" #"cddd") (test-regexp '(#"a") #"q?[ad]" #"a") (test-regexp '(#"d") #"q?[ad]" #"d") (test-regexp #f #"q?[ad]" #"c") (test '(#"a") regexp-match #rx#"^[^\0]" #"aaa\0") (test #f regexp-match #rx#"^[^\0]" #"\0aaa\0") (test '(#"aaa") regexp-match #rx#"^[^\0]*" #"aaa\0") (map (lambda (t) (err/rt-test (byte-pregexp t)) (err/rt-test (pregexp t))) '(#")" #"*" #"?" #"+")) (map (lambda (as-string?) (map (lambda (p) (let ([name (car p)] [predicate (cdr p)] [mk (lambda (name extra not? star?) ((if as-string? pregexp byte-pregexp) ((if as-string? values string->bytes/latin-1) (format "[~a~a[:~a:]]~a" (if not? "^" "") (if extra extra "") name (if star? "*" "")))))] [-bytes (if as-string? (lambda l (bytes->string/latin-1 (apply bytes l))) bytes)]) (let ([try (lambda (extra) (let ([b (mk name extra #f #f)] [not-b (mk name extra #t #f)] [b* (mk name extra #f #t)] [not-b* (mk name extra #t #t)]) (let loop ([c 0]) (unless (= c 128) (let ([in? (or (and extra (= c (char->integer extra))) (predicate (integer->char c)))]) (test (if in? (list (-bytes c)) #f) regexp-match b (-bytes c)) (test (if in? (list (-bytes c c)) (list (-bytes))) regexp-match b* (-bytes c c)) (test (if in? #f (list (-bytes c))) regexp-match not-b (-bytes c)) (test (if in? (list (-bytes)) (list (-bytes c c))) regexp-match not-b* (-bytes c c)) (loop (add1 c))))) (test #f regexp-match b (-bytes 128)) (test (list (-bytes)) regexp-match b* (-bytes 128 128)) (test (list (-bytes 128)) regexp-match not-b (-bytes 128)) (test (list (-bytes 128 128)) regexp-match not-b* (-bytes 128 128))))]) (try #f) (try #\377) (unless (predicate #\x) (try #\x)) (unless (predicate #\space) (try #\space)) (unless (predicate #\000) (try #\000)) (unless (predicate #\002) (try #\002))))) (list (cons "alpha" char-alphabetic?) (cons "alnum" (lambda (x) (or (char-alphabetic? x) (char-numeric? x)))) ))) '(#f #t)) (test '("app\u039Be") regexp-match #px"(?i:app\u039Be)" "app\u039Be") (test '("app\u039Be") regexp-match #px"(?i:app\u03BBe)" "app\u039Be") (test #f regexp-match #px"app\u03BBe" "app\u039Be") (test #f regexp-match #px"(?i:(?-i:app\u03BBe))" "app\u039Be") (test '("app\u039Be") regexp-match #px"(?i:(?-i:app)\u03BBe)" "app\u039Be") (test '("app\u03BBe") regexp-match #px"(?i:app\u039Be)" "app\u03BBe") (test '("app\u03BBe") regexp-match #px"(?i:app[\u039B-\u039C]e)" "app\u03BBe") (test '("app\u039Be") regexp-match #px"(?i:app[\u03BB-\u03BC]e)" "app\u039Be") (let ([sigmas '(#\u03A3 #\u03C2 #\u03C3)] [lambdas '(#\u039B #\u039B #\u03BB)]) (for-each (lambda (s1) (for-each (lambda (s2 l2) (let* ([r (list (format "_~a_" s1))] [gen-sigma? (or (equal? s2 #\u03C2) (not (equal? s1 #\u03C2)))] [gr (and gen-sigma? r)]) (if (equal? s1 s2) (test r regexp-match (format "_~a_" s2) (format "_~a_" s1)) (test #f regexp-match (format "_~a_" s2) (format "_~a_" s1))) (test gr regexp-match (format "(?i:_~a_)" s2) (format "_~a_" s1)) (test gr regexp-match (format "(?i:_[~a]_)" s2) (format "_~a_" s1)) (test (and (not (equal? s1 s2)) r) regexp-match (format "_[^~a]_" s2) (format "_~a_" s1)) (test (and (equal? s1 #\u03C2) (not (equal? s2 #\u03C2)) r) regexp-match (format "(?i:_[^~a]_)" s2) (format "_~a_" s1)) (test gr regexp-match (format "(?i:_[x~a]_)" s2) (format "_~a_" s1)) (test gr regexp-match (format "(?i:_[~a\x1888]_)" s2) (format "_~a_" s1)) (test gr regexp-match (format "(?i:_[~a-~a]_)" s2 s2) (format "_~a_" s1)) (test r regexp-match (format "_[~a-~a]_" (car sigmas) (caddr sigmas)) (format "_~a_" s1)) (test (and (char<=? (car sigmas) s1 s2) r) regexp-match (format "_[~a-~a]_" (car sigmas) s2) (format "_~a_" s1)) (test (and (char<=? s2 s1 (caddr sigmas)) r) regexp-match (format "_[~a-~a]_" s2 (caddr sigmas)) (format "_~a_" s1)) (test (and (or gen-sigma? (equal? s2 #\u03C3)) r) regexp-match (format "(?i:_[~a-~a]_)" (car sigmas) s2) (format "_~a_" s1)) (test (and (or gen-sigma? (equal? s2 #\u03A3)) r) regexp-match (format "(?i:_[~a-~a]_)" s2 (caddr sigmas)) (format "_~a_" s1)) (test (and (or gen-sigma? (equal? s2 #\u03C3)) r) regexp-match (format "(?i:_[~a-~a]_)" l2 s2) (format "_~a_" s1)))) sigmas lambdas)) sigmas)) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Most of the following tests are derived from "testinput" in ;; CL-PPCRE, which probably is from Perl originally. ;; The tests have been modified to avoid various incompatibilities. (map (lambda (t) (if (pair? t) (begin (test (caddr t) regexp-match (byte-pregexp (car t)) (cadr t)) (test (caddr t) regexp-match (byte-pregexp (car t)) (bytes-append #"xxxxxxxxxx" (cadr t)) 10) (test (caddr t) regexp-match (byte-pregexp (car t)) (bytes-append (cadr t) #"xxxxxxxxxx") 0 (bytes-length (cadr t))) (test (caddr t) regexp-match (byte-pregexp (car t)) (open-input-bytes (cadr t))) (test (and (caddr t) (map (lambda (v) (and v (bytes->string/latin-1 v))) (caddr t))) regexp-match (pregexp (bytes->string/latin-1 (car t))) (bytes->string/latin-1 (cadr t))) (test (and (caddr t) (map (lambda (v) (and v (string->bytes/utf-8 (bytes->string/latin-1 v)))) (caddr t))) regexp-match (pregexp (bytes->string/latin-1 (car t))) (open-input-string (bytes->string/latin-1 (cadr t))))) (begin (err/rt-test (byte-pregexp t)) (err/rt-test (pregexp (bytes->string/latin-1 t)))))) '(#"}" #"]" #"[a[:alph:]b]" (#"the quick brown fox" #"the quick brown fox" (#"the quick brown fox")) (#"the quick brown fox" #"The quick brown FOX" #f) (#"the quick brown fox" #"What do you know about the quick brown fox?" (#"the quick brown fox")) (#"the quick brown fox" #"What do you know about THE QUICK BROWN FOX?" #f) (#"(?i:The quick brown fox)" #"the quick brown fox" (#"the quick brown fox")) (#"(?i:The quick brown fox)" #"The quick brown FOX" (#"The quick brown FOX")) (#"(?i:The quick brown fox)" #"What do you know about the quick brown fox?" (#"the quick brown fox")) (#"(?i:The quick brown fox)" #"What do you know about THE QUICK BROWN FOX?" (#"THE QUICK BROWN FOX")) (#"abcd\t\n\r\f\a\e\071\x3b\\$\\\\\\?caxyz" #"abcd\t\n\r\f\a\e9;$\\?caxyz" (#"abcd\t\n\r\f\a\e9;$\\?caxyz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"abxyzpqrrrabbxyyyypqAzz" (#"abxyzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"abxyzpqrrrabbxyyyypqAzz" (#"abxyzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aabxyzpqrrrabbxyyyypqAzz" (#"aabxyzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaabxyzpqrrrabbxyyyypqAzz" (#"aaabxyzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaaabxyzpqrrrabbxyyyypqAzz" (#"aaaabxyzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"abcxyzpqrrrabbxyyyypqAzz" (#"abcxyzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aabcxyzpqrrrabbxyyyypqAzz" (#"aabcxyzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaabcxyzpqrrrabbxyyyypAzz" (#"aaabcxyzpqrrrabbxyyyypAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaabcxyzpqrrrabbxyyyypqAzz" (#"aaabcxyzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaabcxyzpqrrrabbxyyyypqqAzz" (#"aaabcxyzpqrrrabbxyyyypqqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaabcxyzpqrrrabbxyyyypqqqAzz" (#"aaabcxyzpqrrrabbxyyyypqqqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaabcxyzpqrrrabbxyyyypqqqqAzz" (#"aaabcxyzpqrrrabbxyyyypqqqqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaabcxyzpqrrrabbxyyyypqqqqqAzz" (#"aaabcxyzpqrrrabbxyyyypqqqqqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaabcxyzpqrrrabbxyyyypqqqqqqAzz" (#"aaabcxyzpqrrrabbxyyyypqqqqqqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaaabcxyzpqrrrabbxyyyypqAzz" (#"aaaabcxyzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"abxyzzpqrrrabbxyyyypqAzz" (#"abxyzzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aabxyzzzpqrrrabbxyyyypqAzz" (#"aabxyzzzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaabxyzzzzpqrrrabbxyyyypqAzz" (#"aaabxyzzzzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaaabxyzzzzpqrrrabbxyyyypqAzz" (#"aaaabxyzzzzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"abcxyzzpqrrrabbxyyyypqAzz" (#"abcxyzzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aabcxyzzzpqrrrabbxyyyypqAzz" (#"aabcxyzzzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaabcxyzzzzpqrrrabbxyyyypqAzz" (#"aaabcxyzzzzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaaabcxyzzzzpqrrrabbxyyyypqAzz" (#"aaaabcxyzzzzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaaabcxyzzzzpqrrrabbbxyyyypqAzz" (#"aaaabcxyzzzzpqrrrabbbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaaabcxyzzzzpqrrrabbbxyyyyypqAzz" (#"aaaabcxyzzzzpqrrrabbbxyyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaabcxyzpqrrrabbxyyyypABzz" (#"aaabcxyzpqrrrabbxyyyypABzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaabcxyzpqrrrabbxyyyypABBzz" (#"aaabcxyzpqrrrabbxyyyypABBzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #">>>aaabxyzpqrrrabbxyyyypqAzz" (#"aaabxyzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #">aaaabxyzpqrrrabbxyyyypqAzz" (#"aaaabxyzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #">>>>abcxyzpqrrrabbxyyyypqAzz" (#"abcxyzpqrrrabbxyyyypqAzz")) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"abxyzpqrrabbxyyyypqAzz" #f) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"abxyzpqrrrrabbxyyyypqAzz" #f) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"abxyzpqrrrabxyyyypqAzz" #f) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz" #f) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaaabcxyzzzzpqrrrabbbxyyypqAzz" #f) (#"a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" #"aaabcxyzpqrrrabbxyyyypqqqqqqqAzz" #f) (#"^(abc){1,2}zz" #"abczz" (#"abczz" #"abc")) (#"^(abc){1,2}zz" #"abcabczz" (#"abcabczz" #"abc")) (#"^(abc){1,2}zz" #"zz" #f) (#"^(abc){1,2}zz" #"abcabcabczz" #f) (#"^(abc){1,2}zz" #">>abczz" #f) (#"^(b+?|a){1,2}?c" #"bc" (#"bc" #"b")) (#"^(b+?|a){1,2}?c" #"bbc" (#"bbc" #"b")) (#"^(b+?|a){1,2}?c" #"bbbc" (#"bbbc" #"bb")) (#"^(b+?|a){1,2}?c" #"bac" (#"bac" #"a")) (#"^(b+?|a){1,2}?c" #"bbac" (#"bbac" #"a")) (#"^(b+?|a){1,2}?c" #"aac" (#"aac" #"a")) (#"^(b+?|a){1,2}?c" #"abbbbbbbbbbbc" (#"abbbbbbbbbbbc" #"bbbbbbbbbbb")) (#"^(b+?|a){1,2}?c" #"bbbbbbbbbbbac" (#"bbbbbbbbbbbac" #"a")) (#"^(b+?|a){1,2}?c" #"aaac" #f) (#"^(b+?|a){1,2}?c" #"abbbbbbbbbbbac" #f) (#"^(b+|a){1,2}c" #"bc" (#"bc" #"b")) (#"^(b+|a){1,2}c" #"bbc" (#"bbc" #"bb")) (#"^(b+|a){1,2}c" #"bbbc" (#"bbbc" #"bbb")) (#"^(b+|a){1,2}c" #"bac" (#"bac" #"a")) (#"^(b+|a){1,2}c" #"bbac" (#"bbac" #"a")) (#"^(b+|a){1,2}c" #"aac" (#"aac" #"a")) (#"^(b+|a){1,2}c" #"abbbbbbbbbbbc" (#"abbbbbbbbbbbc" #"bbbbbbbbbbb")) (#"^(b+|a){1,2}c" #"bbbbbbbbbbbac" (#"bbbbbbbbbbbac" #"a")) (#"^(b+|a){1,2}c" #"aaac" #f) (#"^(b+|a){1,2}c" #"abbbbbbbbbbbac" #f) (#"^(b+|a){1,2}?bc" #"bbc" (#"bbc" #"b")) #"^(b*|ba){1,2}?bc" (#"^[ab\\]cde]" #"athing" (#"a")) (#"^[ab\\]cde]" #"bthing" (#"b")) (#"^[ab\\]cde]" #"]thing" (#"]")) (#"^[ab\\]cde]" #"cthing" (#"c")) (#"^[ab\\]cde]" #"dthing" (#"d")) (#"^[ab\\]cde]" #"ething" (#"e")) (#"^[ab\\]cde]" #"fthing" #f) (#"^[ab\\]cde]" #"[thing" #f) (#"^[ab\\]cde]" #"\\\\thing" #f) (#"^[]cde]" #"]thing" (#"]")) (#"^[]cde]" #"cthing" (#"c")) (#"^[]cde]" #"dthing" (#"d")) (#"^[]cde]" #"ething" (#"e")) (#"^[]cde]" #"athing" #f) (#"^[]cde]" #"fthing" #f) (#"^[^ab\\]cde]" #"fthing" (#"f")) (#"^[^ab\\]cde]" #"[thing" (#"[")) (#"^[^ab\\]cde]" #"\\\\thing" (#"\\")) (#"^[^ab\\]cde]" #"athing" #f) (#"^[^ab\\]cde]" #"bthing" #f) (#"^[^ab\\]cde]" #"]thing" #f) (#"^[^ab\\]cde]" #"cthing" #f) (#"^[^ab\\]cde]" #"dthing" #f) (#"^[^ab\\]cde]" #"ething" #f) (#"^[^]cde]" #"athing" (#"a")) (#"^[^]cde]" #"fthing" (#"f")) (#"^[^]cde]" #"]thing" #f) (#"^[^]cde]" #"cthing" #f) (#"^[^]cde]" #"dthing" #f) (#"^[^]cde]" #"ething" #f) (#"^\\\201" #"\201" (#"\201")) (#"^\377" #"\377" (#"\377")) (#"^[0-9]+$" #"0" (#"0")) (#"^[0-9]+$" #"1" (#"1")) (#"^[0-9]+$" #"2" (#"2")) (#"^[0-9]+$" #"3" (#"3")) (#"^[0-9]+$" #"4" (#"4")) (#"^[0-9]+$" #"5" (#"5")) (#"^[0-9]+$" #"6" (#"6")) (#"^[0-9]+$" #"7" (#"7")) (#"^[0-9]+$" #"8" (#"8")) (#"^[0-9]+$" #"9" (#"9")) (#"^[0-9]+$" #"10" (#"10")) (#"^[0-9]+$" #"100" (#"100")) (#"^[0-9]+$" #"abc" #f) (#"^.*nter" #"enter" (#"enter")) (#"^.*nter" #"inter" (#"inter")) (#"^.*nter" #"uponter" (#"uponter")) (#"^xxx[0-9]+$" #"xxx0" (#"xxx0")) (#"^xxx[0-9]+$" #"xxx1234" (#"xxx1234")) (#"^xxx[0-9]+$" #"xxx" #f) (#"^.+[0-9][0-9][0-9]$" #"x123" (#"x123")) (#"^.+[0-9][0-9][0-9]$" #"xx123" (#"xx123")) (#"^.+[0-9][0-9][0-9]$" #"123456" (#"123456")) (#"^.+[0-9][0-9][0-9]$" #"123" #f) (#"^.+[0-9][0-9][0-9]$" #"x1234" (#"x1234")) (#"^.+?[0-9][0-9][0-9]$" #"x123" (#"x123")) (#"^.+?[0-9][0-9][0-9]$" #"xx123" (#"xx123")) (#"^.+?[0-9][0-9][0-9]$" #"123456" (#"123456")) (#"^.+?[0-9][0-9][0-9]$" #"123" #f) (#"^.+?[0-9][0-9][0-9]$" #"x1234" (#"x1234")) (#"^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$" #"abc!pqr=apquxz.ixr.zzz.ac.uk" (#"abc!pqr=apquxz.ixr.zzz.ac.uk" #"abc" #"pqr")) (#"^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$" #"!pqr=apquxz.ixr.zzz.ac.uk" #f) (#"^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$" #"abc!=apquxz.ixr.zzz.ac.uk" #f) (#"^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$" #"abc!pqr=apquxz:ixr.zzz.ac.uk" #f) (#"^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$" #"abc!pqr=apquxz.ixr.zzz.ac.ukk" #f) (#":" #"Well, we need a colon: somewhere" (#":")) (#":" #"Fail if we don't" #f) (#"(?i:([\\da-f:]+)$)" #"0abc" (#"0abc" #"0abc")) (#"(?i:([\\da-f:]+)$)" #"abc" (#"abc" #"abc")) (#"(?i:([\\da-f:]+)$)" #"fed" (#"fed" #"fed")) (#"(?i:([\\da-f:]+)$)" #"E" (#"E" #"E")) (#"(?i:([\\da-f:]+)$)" #"::" (#"::" #"::")) (#"(?i:([\\da-f:]+)$)" #"5f03:12C0::932e" (#"5f03:12C0::932e" #"5f03:12C0::932e")) (#"(?i:([\\da-f:]+)$)" #"fed def" (#"def" #"def")) (#"(?i:([\\da-f:]+)$)" #"Any old stuff" (#"ff" #"ff")) (#"(?i:([\\da-f:]+)$)" #"0zzz" #f) (#"(?i:([\\da-f:]+)$)" #"gzzz" #f) (#"(?i:([\\da-f:]+)$)" #"fed\\x20" (#"20" #"20")) (#"(?i:([\\da-f:]+)$)" #"Any old rubbish" #f) (#"^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$" #".1.2.3" (#".1.2.3" #"1" #"2" #"3")) (#"^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$" #"A.12.123.0" (#"A.12.123.0" #"12" #"123" #"0")) (#"^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$" #".1.2.3333" #f) (#"^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$" #"1.2.3" #f) (#"^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$" #"1234.2.3" #f) (#"^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$" #"1 IN SOA non-sp1 non-sp2(" (#"1 IN SOA non-sp1 non-sp2(" #"1" #"non-sp1" #"non-sp2")) (#"^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$" #"1 IN SOA non-sp1 non-sp2 (" (#"1 IN SOA non-sp1 non-sp2 (" #"1" #"non-sp1" #"non-sp2")) (#"^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$" #"1IN SOA non-sp1 non-sp2(" #f) (#"^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$" #"a." (#"a." #f)) (#"^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$" #"Z." (#"Z." #f)) (#"^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$" #"2." (#"2." #f)) (#"^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$" #"ab-c.pq-r." (#"ab-c.pq-r." #".pq-r")) (#"^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$" #"sxk.zzz.ac.uk." (#"sxk.zzz.ac.uk." #".uk")) (#"^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$" #"x-.y-." (#"x-.y-." #".y-")) (#"^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$" #"-abc.peq." #f) (#"^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$" #"*.a" (#"*.a" #f #f #f)) (#"^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$" #"*.b0-a" (#"*.b0-a" #"0-a" #f #f)) (#"^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$" #"*.c3-b.c" (#"*.c3-b.c" #"3-b" #".c" #f)) (#"^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$" #"*.c-a.b-c" (#"*.c-a.b-c" #"-a" #".b-c" #"-c")) (#"^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$" #"*.0" #f) (#"^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$" #"*.a-" #f) (#"^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$" #"*.a-b.c-" #f) (#"^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$" #"*.c-a.0-c" #f) (#"^(?=ab(de))(abd)(e)" #"abde" (#"abde" #"de" #"abd" #"e")) (#"^(?!(ab)de|x)(abd)(f)" #"abdf" (#"abdf" #"ab" #"abd" #"f")) (#"^(?=(ab(cd)))(ab)" #"abcd" (#"ab" #"abcd" #"cd" #"ab")) (#"(?i:^[\\da-f](\\.[\\da-f])*$)" #"a.b.c.d" (#"a.b.c.d" #".d")) (#"(?i:^[\\da-f](\\.[\\da-f])*$)" #"A.B.C.D" (#"A.B.C.D" #".D")) (#"(?i:^[\\da-f](\\.[\\da-f])*$)" #"a.b.c.1.2.3.C" (#"a.b.c.1.2.3.C" #".C")) (#"^\\\".*\\\"\\s*(;.*)?$" #"\"1234\"" (#"\"1234\"" #f)) (#"^\\\".*\\\"\\s*(;.*)?$" #"\"abcd\" ;" (#"\"abcd\" ;" #";")) (#"^\\\".*\\\"\\s*(;.*)?$" #"\"\" ; rhubarb" (#"\"\" ; rhubarb" #"; rhubarb")) (#"^\\\".*\\\"\\s*(;.*)?$" #"\"1234\" : things" #f) (#"^$" #"\\" #f) (#"^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$" #"abcdefhijklm" (#"abcdefhijklm" #"abc" #"bc" #"c" #"def" #"ef" #"f" #"hij" #"ij" #"j" #"klm" #"lm" #"m")) (#"^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$" #"abcdefhijklm" (#"abcdefhijklm" #"bc" #"c" #"ef" #"f" #"ij" #"j" #"lm" #"m")) ; (#"^[\\w][\\W][\\s][\\S][\\d][\\D][\\b][\\n][\\c]][\\022]" #"a+ Z0+\\x08\\n\\x1d\\x12" #f) (#"^[.^$|()*+?{,}]+" #".^\\$(*+)|{?,?}" (#".^")) (#"^a*\\w" #"z" (#"z")) (#"^a*\\w" #"az" (#"az")) (#"^a*\\w" #"aaaz" (#"aaaz")) (#"^a*\\w" #"a" (#"a")) (#"^a*\\w" #"aa" (#"aa")) (#"^a*\\w" #"aaaa" (#"aaaa")) (#"^a*\\w" #"a+" (#"a")) (#"^a*\\w" #"aa+" (#"aa")) (#"^a*?\\w" #"z" (#"z")) (#"^a*?\\w" #"az" (#"a")) (#"^a*?\\w" #"aaaz" (#"a")) (#"^a*?\\w" #"a" (#"a")) (#"^a*?\\w" #"aa" (#"a")) (#"^a*?\\w" #"aaaa" (#"a")) (#"^a*?\\w" #"a+" (#"a")) (#"^a*?\\w" #"aa+" (#"a")) (#"^a+\\w" #"az" (#"az")) (#"^a+\\w" #"aaaz" (#"aaaz")) (#"^a+\\w" #"aa" (#"aa")) (#"^a+\\w" #"aaaa" (#"aaaa")) (#"^a+\\w" #"aa+" (#"aa")) (#"^a+?\\w" #"az" (#"az")) (#"^a+?\\w" #"aaaz" (#"aa")) (#"^a+?\\w" #"aa" (#"aa")) (#"^a+?\\w" #"aaaa" (#"aa")) (#"^a+?\\w" #"aa+" (#"aa")) (#"^\\d{8}\\w{2,}" #"1234567890" (#"1234567890")) (#"^\\d{8}\\w{2,}" #"12345678ab" (#"12345678ab")) (#"^\\d{8}\\w{2,}" #"12345678__" (#"12345678__")) (#"^\\d{8}\\w{2,}" #"1234567" #f) (#"^[aeiou\\d]{4,5}$" #"uoie" (#"uoie")) (#"^[aeiou\\d]{4,5}$" #"1234" (#"1234")) (#"^[aeiou\\d]{4,5}$" #"12345" (#"12345")) (#"^[aeiou\\d]{4,5}$" #"aaaaa" (#"aaaaa")) (#"^[aeiou\\d]{4,5}$" #"123456" #f) (#"^[aeiou\\d]{4,5}?" #"uoie" (#"uoie")) (#"^[aeiou\\d]{4,5}?" #"1234" (#"1234")) (#"^[aeiou\\d]{4,5}?" #"12345" (#"1234")) (#"^[aeiou\\d]{4,5}?" #"aaaaa" (#"aaaa")) (#"^[aeiou\\d]{4,5}?" #"123456" (#"1234")) (#"^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\12$" #"abcdefghijkcda2" #f) (#"^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\12$" #"abcdefghijkkkkcda2" #f) (#"(cat(a(ract|tonic)|erpillar)) \\1()2(3)" #"cataract cataract23" (#"cataract cataract23" #"cataract" #"aract" #"ract" #"" #"3")) (#"(cat(a(ract|tonic)|erpillar)) \\1()2(3)" #"catatonic catatonic23" (#"catatonic catatonic23" #"catatonic" #"atonic" #"tonic" #"" #"3")) (#"(cat(a(ract|tonic)|erpillar)) \\1()2(3)" #"caterpillar caterpillar23" (#"caterpillar caterpillar23" #"caterpillar" #"erpillar" #f #"" #"3")) (#"^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]" #"From abcd Mon Sep 01 12:33:02 1997" (#"From abcd Mon Sep 01 12:33" #"abcd")) (#"^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d" #"From abcd Mon Sep 01 12:33:02 1997" (#"From abcd Mon Sep 01 12:33" #"Sep ")) (#"^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d" #"From abcd Mon Sep 1 12:33:02 1997" (#"From abcd Mon Sep 1 12:33" #"Sep ")) (#"^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d" #"From abcd Sep 01 12:33:02 1997" #f) (#"\\w+(?=\t)" #"the quick brown\\t fox" #f) (#"foo(?!bar)(.*)" #"foobar is foolish see?" (#"foolish see?" #"lish see?")) (#"(?:(?!foo)...|^.{0,2})bar(.*)" #"foobar crowbar etc" (#"rowbar etc" #" etc")) (#"(?:(?!foo)...|^.{0,2})bar(.*)" #"barrel" (#"barrel" #"rel")) (#"(?:(?!foo)...|^.{0,2})bar(.*)" #"2barrel" (#"2barrel" #"rel")) (#"(?:(?!foo)...|^.{0,2})bar(.*)" #"A barrel" (#"A barrel" #"rel")) (#"^(\\D*)(?=\\d)(?!123)" #"abc456" (#"abc" #"abc")) (#"^(\\D*)(?=\\d)(?!123)" #"abc123" #f) (#"^(a)\\1{2,3}(.)" #"aaab" (#"aaab" #"a" #"b")) (#"^(a)\\1{2,3}(.)" #"aaaab" (#"aaaab" #"a" #"b")) (#"^(a)\\1{2,3}(.)" #"aaaaab" (#"aaaaa" #"a" #"a")) (#"^(a)\\1{2,3}(.)" #"aaaaaab" (#"aaaaa" #"a" #"a")) (#"(?!^)abc" #"the abc" (#"abc")) (#"(?!^)abc" #"abc" #f) (#"(?=^)abc" #"abc" (#"abc")) (#"(?=^)abc" #"the abc" #f) (#"^[ab]{1,3}(ab*|b)" #"aabbbbb" (#"aabb" #"b")) (#"^[ab]{1,3}?(ab*|b)" #"aabbbbb" (#"aabbbbb" #"abbbbb")) (#"^[ab]{1,3}?(ab*?|b)" #"aabbbbb" (#"aa" #"a")) (#"^[ab]{1,3}(ab*?|b)" #"aabbbbb" (#"aabb" #"b")) #| (#"abc\\0def\\00pqr\\000xyz\\0000AB" #"abc\\0def\\00pqr\\000xyz\\0000AB" #f) (#"abc\\0def\\00pqr\\000xyz\\0000AB" #"abc456 abc\\0def\\00pqr\\000xyz\\0000ABCDE" #f) (#"abc\\x0def\\x00pqr\\x000xyz\\x0000AB" #"abc\\x0def\\x00pqr\\x000xyz\\x0000AB" #f) (#"abc\\x0def\\x00pqr\\x000xyz\\x0000AB" #"abc456 abc\\x0def\\x00pqr\\x000xyz\\x0000ABCDE" #f) (#"^[\\000-\\037]" #"\\0A" #f) (#"^[\\000-\\037]" #"\\01B" #f) (#"^[\\000-\\037]" #"\\037C" #f) (#"\\0*" #"\\0\\0\\0\\0" #f) (#"A\\x0{2,3}Z" #"The A\\x0\\x0Z" #f) (#"A\\x0{2,3}Z" #"An A\\0\\x0\\0Z" #f) (#"A\\x0{2,3}Z" #"A\\0Z" #f) (#"A\\x0{2,3}Z" #"A\\0\\x0\\0\\x0Z" #f) |# (#"^(cow|)\\1(bell)" #"cowcowbell" (#"cowcowbell" #"cow" #"bell")) (#"^(cow|)\\1(bell)" #"bell" (#"bell" #"" #"bell")) (#"^(cow|)\\1(bell)" #"cowbell" #f) #| (#"^\\s" #"\\040abc" #f) (#"^\\s" #"\\x0cabc" #f) (#"^\\s" #"\\nabc" #f) (#"^\\s" #"\\rabc" #f) (#"^\\s" #"\\tabc" #f) (#"^\\s" #"abc" #f) |# (#"^(a|x)\\1*b" #"ab" (#"ab" #"a")) (#"^(a|x)\\1*b" #"aaaab" (#"aaaab" #"a")) (#"^(a|x)\\1*b" #"acb" #f) (#"^(a|x)\\1+b" #"aab" (#"aab" #"a")) (#"^(a|x)\\1+b" #"aaaab" (#"aaaab" #"a")) (#"^(a|x)\\1+b" #"ab" #f) (#"^(a|)\\1?b" #"ab" (#"ab" #"a")) (#"^(a|)\\1?b" #"aab" (#"aab" #"a")) (#"^(a|)\\1?b" #"b" (#"b" #"")) (#"^(a|)\\1?b" #"acb" #f) #"^(a|)\\1{2}b" #"^(a|)\\1{2,3}b" (#"ab{1,3}bc" #"abbbbc" (#"abbbbc")) (#"ab{1,3}bc" #"abbbc" (#"abbbc")) (#"ab{1,3}bc" #"abbc" (#"abbc")) (#"ab{1,3}bc" #"abc" #f) (#"ab{1,3}bc" #"abbbbbc" #f) (#"([^.]*)\\.([^:]*):[T ]+(.*)" #"track1.title:TBlah blah blah" (#"track1.title:TBlah blah blah" #"track1" #"title" #"Blah blah blah")) (#"(?i:([^.]*)\\.([^:]*):[T ]+(.*))" #"track1.title:TBlah blah blah" (#"track1.title:TBlah blah blah" #"track1" #"title" #"Blah blah blah")) (#"(?i:([^.]*)\\.([^:]*):[t ]+(.*))" #"track1.title:TBlah blah blah" (#"track1.title:TBlah blah blah" #"track1" #"title" #"Blah blah blah")) (#"^[W-c]+$" #"WXY_^abc" (#"WXY_^abc")) (#"^[W-c]+$" #"wxy" #f) (#"(?i:^[W-c]+$)" #"WXY_^abc" (#"WXY_^abc")) (#"(?i:^[W-c]+$)" #"wxy_^ABC" (#"wxy_^ABC")) (#"(?i:^[\x3f-\x5F]+$)" #"WXY_^abc" (#"WXY_^abc")) (#"(?i:^[\x3f-\x5F]+$)" #"wxy_^ABC" (#"wxy_^ABC")) (#"(?:b)|(?::+)" #"b::c" (#"b")) (#"(?:b)|(?::+)" #"c::b" (#"::")) (#"[-az]+" #"az-" (#"az-")) (#"[-az]+" #"b" #f) (#"[az-]+" #"za-" (#"za-")) (#"[az-]+" #"b" #f) (#"[a\\-z]+" #"a-z" (#"a-z")) (#"[a\\-z]+" #"b" #f) (#"[a-z]+" #"abcdxyz" (#"abcdxyz")) (#"[\\d-]+" #"12-34" (#"12-34")) (#"[\\d-]+" #"aaa" #f) #"[\\d-z]" (#"[\\dz-]+" #"12-34z" (#"12-34z")) (#"[\\dz-]+" #"aaa" #f) (#"\\\x5c" #"\\\\" (#"\\")) (#"\x20Z" #"the Zoo" (#" Z")) (#"\x20Z" #"Zulu" #f) (#"(?i:(abc)\\1)" #"abcabc" (#"abcabc" #"abc")) (#"(?i:(abc)\\1)" #"ABCabc" (#"ABCabc" #"ABC")) (#"(?i:(abc)\\1)" #"abcABC" (#"abcABC" #"abc")) (#"ab\\{3cd" #"ab{3cd" (#"ab{3cd")) #"ab{3cd" (#"ab\\{3,cd" #"ab{3,cd" (#"ab{3,cd")) #"ab{3,cd" (#"ab\\{3,4a\\}cd" #"ab{3,4a}cd" (#"ab{3,4a}cd")) #"ab{3,4a}cd" (#"\\{4,5a\\}bc" #"{4,5a}bc" (#"{4,5a}bc")) #"{4,5a}bc" (#"(abc)\123" #"abc\x53" (#"abcS" #"abc")) (#"(abc)\223" #"abc\x93" (#"abc\x93" #"abc")) (#"(abc)\323" #"abc\xd3" (#"abc\xd3" #"abc")) (#"(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\12\123" #"abcdefghijkllS" (#"abcdefghijkllS" #"a" #"b" #"c" #"d" #"e" #"f" #"g" #"h" #"i" #"j" #"k" #"l")) #"(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\123" (#"a{0}bc" #"bc" (#"bc")) (#"(a|(bc)){0,0}?xyz" #"xyz" (#"xyz" #f #f)) (#"abc[\\10]de" #"abc\010de" #f) (#"abc[\\1]de" #"abc\1de" #f) (#"(abc)[\\1]de" #"abc\1de" #f) "^([^a])([^\\b])([^c]*)([^d]{3,4})" (#"[^a]" #"Abc" (#"A")) (#"(?i:[^a])" #"Abc " (#"b")) (#"[^a]+" #"AAAaAbc" (#"AAA")) (#"(?i:[^a]+)" #"AAAaAbc " (#"bc ")) (#"[^k]$" #"abc" (#"c")) (#"[^k]$" #"abk " (#" ")) (#"[^k]{2,3}$" #"abc" (#"abc")) (#"[^k]{2,3}$" #"kbc" (#"bc")) (#"[^k]{2,3}$" #"kabc " (#"bc ")) (#"[^k]{2,3}$" #"abk" #f) (#"[^k]{2,3}$" #"akb" #f) (#"[^k]{2,3}$" #"akk " #f) (#"^\\d{8,}\\@.+[^k]$" #"12345678\\@a.b.c.d" #f) (#"^\\d{8,}\\@.+[^k]$" #"123456789\\@x.y.z" #f) (#"^\\d{8,}\\@.+[^k]$" #"12345678\\@x.y.uk" #f) (#"^\\d{8,}\\@.+[^k]$" #"1234567\\@a.b.c.d " #f) (#"(a)\\1{8,}" #"aaaaaaaaa" (#"aaaaaaaaa" #"a")) (#"(a)\\1{8,}" #"aaaaaaaaaa" (#"aaaaaaaaaa" #"a")) (#"(a)\\1{8,}" #"aaaaaaa " #f) (#"[^a]" #"aaaabcd" (#"b")) (#"[^a]" #"aaAabcd " (#"A")) (#"(?i:[^a])" #"aaaabcd" (#"b")) (#"(?i:[^a])" #"aaAabcd " (#"b")) (#"[^az]" #"aaaabcd" (#"b")) (#"[^az]" #"aaAabcd " (#"A")) (#"(?i:[^az])" #"aaaabcd" (#"b")) (#"(?i:[^az])" #"aaAabcd " (#"b")) (#"P[^*]TAIRE[^*]{1,6}?LL" #"xxxxxxxxxxxPSTAIREISLLxxxxxxxxx" (#"PSTAIREISLL")) (#"P[^*]TAIRE[^*]{1,}?LL" #"xxxxxxxxxxxPSTAIREISLLxxxxxxxxx" (#"PSTAIREISLL")) (#"(\\.\\d\\d[1-9]?)\\d+" #"1.230003938" (#".230003938" #".23")) (#"(\\.\\d\\d[1-9]?)\\d+" #"1.875000282 " (#".875000282" #".875")) (#"(\\.\\d\\d[1-9]?)\\d+" #"1.235 " (#".235" #".23")) (#"(\\.\\d\\d((?=0)|\\d(?=\\d)))" #"1.230003938 " (#".23" #".23" #"")) (#"(\\.\\d\\d((?=0)|\\d(?=\\d)))" #"1.875000282" (#".875" #".875" #"5")) (#"(\\.\\d\\d((?=0)|\\d(?=\\d)))" #"1.235 " #f) (#"a(?:)b" #"ab " (#"ab")) (#"(?i:\\b(foo)\\s+(\\w+))" #"Food is on the foo table" (#"foo table" #"foo" #"table")) (#"foo(.*)bar" #"The food is under the bar in the barn." (#"food is under the bar in the bar" #"d is under the bar in the ")) (#"foo(.*?)bar" #"The food is under the bar in the barn." (#"food is under the bar" #"d is under the ")) (#"(.*)(\\d*)" #"I have 2 numbers: 53147" (#"I have 2 numbers: 53147" #"I have 2 numbers: 53147" #"")) (#"(.*)(\\d+)" #"I have 2 numbers: 53147" (#"I have 2 numbers: 53147" #"I have 2 numbers: 5314" #"7")) (#"(.*?)(\\d*)" #"I have 2 numbers: 53147" (#"" #"" #"")) (#"(.*?)(\\d+)" #"I have 2 numbers: 53147" (#"I have 2" #"I have " #"2")) (#"(.*)(\\d+)$" #"I have 2 numbers: 53147" (#"I have 2 numbers: 53147" #"I have 2 numbers: 5314" #"7")) (#"(.*?)(\\d+)$" #"I have 2 numbers: 53147" (#"I have 2 numbers: 53147" #"I have 2 numbers: " #"53147")) (#"(.*)\\b(\\d+)$" #"I have 2 numbers: 53147" (#"I have 2 numbers: 53147" #"I have 2 numbers: " #"53147")) (#"(.*\\D)(\\d+)$" #"I have 2 numbers: 53147" (#"I have 2 numbers: 53147" #"I have 2 numbers: " #"53147")) (#"^\\D*(?!123)" #"ABC123" (#"AB")) (#"^(\\D*)(?=\\d)(?!123)" #"ABC445" (#"ABC" #"ABC")) (#"^(\\D*)(?=\\d)(?!123)" #"ABC123" #f) #"^[W-]46]" (#"^[W-]46\\]" #"W46]789 " (#"W46]")) (#"^[W-]46\\]" #"-46]789" (#"-46]")) (#"^[W-]46\\]" #"Wall" #f) (#"^[W-]46\\]" #"Zebra" #f) (#"^[W-]46\\]" #"42" #f) (#"^[W-]46\\]" #"[abcd] " #f) (#"^[W-]46\\]" #"]abcd[" #f) (#"^[W-\\]46]" #"W46]789 " (#"W")) (#"^[W-\\]46]" #"Wall" (#"W")) (#"^[W-\\]46]" #"Zebra" (#"Z")) (#"^[W-\\]46]" #"Xylophone " (#"X")) (#"^[W-\\]46]" #"42" (#"4")) (#"^[W-\\]46]" #"[abcd] " (#"[")) (#"^[W-\\]46]" #"]abcd[" (#"]")) (#"^[W-\\]46]" #"\\\\backslash " (#"\\")) (#"^[W-\\]46]" #"-46]789" #f) (#"^[W-\\]46]" #"well" #f) (#"\\d\\d\\/\\d\\d\\/\\d\\d\\d\\d" #"01/01/2000" (#"01/01/2000")) (#"word (?:[a-zA-Z0-9]+ ){0,10}otherword" #"rd cat dog elephant mussel cow horse canary baboon snake shark otherword" #f) (#"word (?:[a-zA-Z0-9]+ ){0,10}otherword" #"rd cat dog elephant mussel cow horse canary baboon snake shark" #f) (#"word (?:[a-zA-Z0-9]+ ){0,300}otherword" #"rd cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope" #f) (#"^(a){0,0}" #"bcd" (#"" #f)) (#"^(a){0,0}" #"abc" (#"" #f)) (#"^(a){0,0}" #"aab " (#"" #f)) (#"^(a){0,1}" #"bcd" (#"" #f)) (#"^(a){0,1}" #"abc" (#"a" #"a")) (#"^(a){0,1}" #"aab " (#"a" #"a")) (#"^(a){0,2}" #"bcd" (#"" #f)) (#"^(a){0,2}" #"abc" (#"a" #"a")) (#"^(a){0,2}" #"aab " (#"aa" #"a")) (#"^(a){0,3}" #"bcd" (#"" #f)) (#"^(a){0,3}" #"abc" (#"a" #"a")) (#"^(a){0,3}" #"aab" (#"aa" #"a")) (#"^(a){0,3}" #"aaa " (#"aaa" #"a")) (#"^(a){0,}" #"bcd" (#"" #f)) (#"^(a){0,}" #"abc" (#"a" #"a")) (#"^(a){0,}" #"aab" (#"aa" #"a")) (#"^(a){0,}" #"aaa" (#"aaa" #"a")) (#"^(a){0,}" #"aaaaaaaa " (#"aaaaaaaa" #"a")) (#"^(a){1,1}" #"bcd" #f) (#"^(a){1,1}" #"abc" (#"a" #"a")) (#"^(a){1,1}" #"aab " (#"a" #"a")) (#"^(a){1,2}" #"bcd" #f) (#"^(a){1,2}" #"abc" (#"a" #"a")) (#"^(a){1,2}" #"aab " (#"aa" #"a")) (#"^(a){1,3}" #"bcd" #f) (#"^(a){1,3}" #"abc" (#"a" #"a")) (#"^(a){1,3}" #"aab" (#"aa" #"a")) (#"^(a){1,3}" #"aaa " (#"aaa" #"a")) (#"^(a){1,}" #"bcd" #f) (#"^(a){1,}" #"abc" (#"a" #"a")) (#"^(a){1,}" #"aab" (#"aa" #"a")) (#"^(a){1,}" #"aaa" (#"aaa" #"a")) (#"^(a){1,}" #"aaaaaaaa " (#"aaaaaaaa" #"a")) (#"^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" #"123456654321" (#"123456654321")) (#"^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d" #"123456654321 " (#"123456654321")) (#"^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]" #"123456654321" (#"123456654321")) (#"^[abc]{12}" #"abcabcabcabc" (#"abcabcabcabc")) (#"^[a-c]{12}" #"abcabcabcabc" (#"abcabcabcabc")) (#"^(a|b|c){12}" #"abcabcabcabc " (#"abcabcabcabc" #"c")) (#"^[abcdefghijklmnopqrstuvwxy0123456789]" #"n" (#"n")) (#"^[abcdefghijklmnopqrstuvwxy0123456789]" #"z " #f) (#"abcde{0,0}" #"abcd" (#"abcd")) (#"abcde{0,0}" #"abce " #f) (#"ab[cd]{0,0}e" #"abe" (#"abe")) (#"ab[cd]{0,0}e" #"abcde " #f) (#"ab(c){0,0}d" #"abd" (#"abd" #f)) (#"ab(c){0,0}d" #"abcd " #f) (#"a(b*)" #"a" (#"a" #"")) (#"a(b*)" #"ab" (#"ab" #"b")) (#"a(b*)" #"abbbb" (#"abbbb" #"bbbb")) (#"a(b*)" #"bbbbb " #f) (#"ab\\d{0}e" #"abe" (#"abe")) (#"ab\\d{0}e" #"ab1e " #f) (#"\"([^\\\\\"]+|\\\\.)*\"" #"the \\\"quick\\\" brown fox" #f) (#"\"([^\\\\\"]+|\\\\.)*\"" #"\\\"the \\\\\\\"quick\\\\\\\" brown fox\\\" " #f) (#"(?i: