(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:]{0,})>]{0,})>([\\d]{0,}\\.)(.*)((
([\\w\\W\\s\\d][^<>]{0,})|[\\s]{0,}))<\\/a><\\/TD>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><\\/TR>)" #"R BGCOLOR='#DBE9E9'>43.Word Processor
(N-1286)
Lega lstaff.comCA - Statewide" #f) (#"^(b+?|a){1,2}?c" #"bac" (#"bac" #"a")) (#"^(b+?|a){1,2}?c" #"bbac" (#"bbac" #"a")) (#"^(b+?|a){1,2}?c" #"bbbac" (#"bbbac" #"a")) (#"^(b+?|a){1,2}?c" #"bbbbac" (#"bbbbac" #"a")) (#"^(b+?|a){1,2}?c" #"bbbbbac " (#"bbbbbac" #"a")) (#"^(b+|a){1,2}?c" #"bac" (#"bac" #"a")) (#"^(b+|a){1,2}?c" #"bbac" (#"bbac" #"a")) (#"^(b+|a){1,2}?c" #"bbbac" (#"bbbac" #"a")) (#"^(b+|a){1,2}?c" #"bbbbac" (#"bbbbac" #"a")) (#"^(b+|a){1,2}?c" #"bbbbbac " (#"bbbbbac" #"a")) (#"\x0\\{ab\\}" #"\0{ab}" (#"\0{ab}")) (#"(A|B)*?CD" #"CD " (#"CD" #f)) (#"(A|B)*CD" #"CD " (#"CD" #f)) (#"(AB)*?\\1" #"ABABAB" (#"ABAB" #"AB")) (#"(AB)*\\1" #"ABABAB" (#"ABABAB" #"AB")) #"((a{0,5}){0,5}){0,5}[c]" #"((a{0,5}){0,5})*[c]" #"((a{0,5}){0,5})*[c]" #"(\\b)*a" (#"(a)*b" #"ab" (#"ab" #"a")) #"(a|)*b" #"(a|)*b" #"(a|)*b" (#"^(?:(a)|(b))*\\1\\2$" #"abab" (#"abab" #"a" #"b")) (#"abc[^x]def" #"abcxabcydef" (#"abcydef")) (#"^(a|\\1x)*$" #"aax" (#"aax" #"ax")) (#"^(a|\\1x)*$" #"aaxa" (#"aaxa" #"a")) (#"" #"@{['']}" (#"")) (#"^(?:(a)|(b))*$" #"ab" (#"ab" #"a" #"b")) (#"[\0]" #"a" #f) (#"[\0]" #"\0" (#"\0")) (#"[\1]" #"a" #f) (#"[\1]" #"\1" (#"\1")) (#"\\10()()()()()()()()()()" #"a" #f) (#"a(?<=)b" #"ab" (#"ab")) ;; << added "=" to pattern (#"(?<=qq)b*" #"aqbbbqqbb" (#"bb")) ;; << added (#"(?<=q?q)b*" #"aqbbbqqbb" (#"bbb")) ;; << added (#"()" #"a" (#"" #"")) #"[\\x]" #"[\\x]" #"((a)*)*" (#"()a\\1" #"a" (#"a" #"")) (#"a\\1()" #"a" #f) (#"a(?i:a)a" #"aaa" (#"aaa")) (#"a(?i:a)a" #"aAa" (#"aAa")) (#"a(?i:a)a" #"aAA" #f) (#"a(?i:a(?-i:a))" #"aaa" (#"aaa")) (#"a(?i:a(?-i:a))" #"aAa" (#"aAa")) (#"a(?i:a(?-i:a))" #"aAA" #f) #"\\x" #"[a-c-e]" #"[a-c-e]" #"[a-c-e]" #"[a-c-e]" #"[b-\\d]" #"[b-\\d]" #"[b-\\d]" #"[b-\\d]" #"[b-\\d]" #"[\\d-f]" #"[\\d-f]" #"[\\d-f]" #"[\\d-f]" #"[\\d-f]" (#"[-b\\d]" #"b" (#"b")) (#"[-b\\d]" #"c" #f) (#"[-b\\d]" #"d" #f) (#"[-b\\d]" #"-" (#"-")) (#"[-b\\d]" #"1" (#"1")) (#"[\\df-]" #"d" #f) (#"[\\df-]" #"e" #f) (#"[\\df-]" #"f" (#"f")) (#"[\\df-]" #"-" (#"-")) (#"[\\df-]" #"1" (#"1")) (#"[-a-c]" #"-" (#"-")) (#"[-a-c]" #"a" (#"a")) (#"[-a-c]" #"b" (#"b")) (#"[-a-c]" #"d" #f) (#"[a-c-]" #"-" (#"-")) (#"[a-c-]" #"a" (#"a")) (#"[a-c-]" #"b" (#"b")) (#"[a-c-]" #"d" #f) (#"[-]" #"a" #f) (#"[-]" #"-" (#"-")) (#"[--]" #"a" #f) (#"[--]" #"-" (#"-")) #"[---]" #"[--b]" (#"[-b-]" #"-" (#"-")) (#"[-b-]" #"a" #f) (#"[-b-]" #"c" #f) #"a{" (#"a{}" #"aaa" (#"")) #"a{3" #"a{3," #"a{3, 3}" #"a{3, 3}" #"a{3, 3}" #"a{3, 3}" #"a{3, 3}" #"a{3, 3}" #"\\x x" #"\\x x" #"\\x 3" #"\\x 3" #"\\x 3" #"\\x 3" #"^a{ 1}$" #"^a{ 1}$" #"^a{ 1}$" #"{}" #"{}" (#"|" #"x" (#"")) (#"|x" #"x" (#"")) (#"x|" #"x" (#"x")) (#"\0000" #"\0000" (#"\0\x30")) (#"a(?<=)b" #"ab" (#"ab")) (#"a(?i:b)" #"ab" (#"ab")) (#"a(?i:b)" #"aB" (#"aB")) (#"a(?i:b)" #"Ab" #f) #"a(?<=a){3000}a" #"a(){3000}a" #"a(?:){3000}a" #"a(?<=a)*a" #"a(?!=a)*a" #"a()*a" #"a(?:)*a" #"x(?<=a)*a" #"a(?<=(a))*\\1" #"a(?<=(a))*?\\1" #"(?=(a)\\1)*aa" (#"^((a|b){2,5}){2}$" #"aaabbbbb" (#"aaabbbbb" #"bbb" #"b")) #"^(b*|ba){1,2}bc" (#"^a{4,5}(?:c|a)c$" #"aaac" #f) (#"^a{4,5}(?:c|a)c$" #"aaaac" #f) #"^(a|){4,5}(?:c|a)c$" (#"(?m:^).abc$" #"exabc" #f) (#"(?m:^)abc" #"c" #f) (#"^abc" #"c" #f) (#"(?(\\.\\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 " #f) (#"^((?>\\w+)|(?>\\s+))*$" #"now is the time for all good men to come to the aid of the party" (#"now is the time for all good men to come to the aid of the party" #"party")) (#"^((?>\\w+)|(?>\\s+))*$" #"this is not a line with only words and spaces!" #f) (#"(\\d+)(\\w)" #"12345a" (#"12345a" #"12345" #"a")) (#"(\\d+)(\\w)" #"12345+ " (#"12345" #"1234" #"5")) (#"((?>\\d+))(\\w)" #"12345a" (#"12345a" #"12345" #"a")) (#"((?>\\d+))(\\w)" #"12345+ " #f) (#"(?>a+)b" #"aaab" (#"aaab")) (#"((?>a+)b)" #"aaab" (#"aaab" #"aaab")) (#"(?>(a+))b" #"aaab" (#"aaab" #"aaa")) (#"(?>b)+" #"aaabbbccc" (#"bbb")) (#"(?>a+|b+|c+)*c" #"aaabbbbccccd" (#"aaabbbbc")) (#"((?>[^()]+)|\\([^()]*\\))+" #"((abc(ade)ufh()()x" (#"abc(ade)ufh()()x" #"x")) (#"\\(((?>[^()]+)|\\([^()]+\\))+\\)" #"(abc)" (#"(abc)" #"abc")) (#"\\(((?>[^()]+)|\\([^()]+\\))+\\)" #"(abc(def)xyz)" (#"(abc(def)xyz)" #"xyz")) (#"\\(((?>[^()]+)|\\([^()]+\\))+\\)" #"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " #f) (#"a(?i:b)c" #"abc" (#"abc")) (#"a(?i:b)c" #"aBc" (#"aBc")) (#"a(?i:b)c" #"ABC" #f) (#"a(?i:b)c" #"abC" #f) (#"a(?i:b)c" #"aBC" #f) (#"a(?i:b)*c" #"aBc" (#"aBc")) (#"a(?i:b)*c" #"aBBc" (#"aBBc")) (#"a(?i:b)*c" #"aBC" #f) (#"a(?i:b)*c" #"aBBC" #f) (#"a(?=b(?i:c))\\w\\wd" #"abcd" (#"abcd")) (#"a(?=b(?i:c))\\w\\wd" #"abCd" (#"abCd")) (#"a(?=b(?i:c))\\w\\wd" #"aBCd" #f) (#"a(?=b(?i:c))\\w\\wd" #"abcD " #f) (#"(?i:(?s-i:more.*than).*million)" #"more than million" (#"more than million")) (#"(?i:(?s-i:more.*than).*million)" #"more than MILLION" (#"more than MILLION")) (#"(?i:(?s-i:more.*than).*million)" #"MORE THAN MILLION " #f) (#"(?i:(?s-i:more.*than).*million)" #"more than million" (#"more than million")) (#"(?i:(?s-i:more.*than).*million)" #"more than MILLION" (#"more than MILLION")) (#"(?i:(?s-i:more.*than).*million)" #"MORE THAN MILLION " #f) (#"(?>a(?i:b+))+c" #"abc" (#"abc")) (#"(?>a(?i:b+))+c" #"aBbc" (#"aBbc")) (#"(?>a(?i:b+))+c" #"aBBc " (#"aBBc")) (#"(?>a(?i:b+))+c" #"Abc" #f) (#"(?>a(?i:b+))+c" #"abAb " #f) (#"(?>a(?i:b+))+c" #"abbC " #f) (#"(?=a(?i:b))\\w\\wc" #"abc" (#"abc")) (#"(?=a(?i:b))\\w\\wc" #"aBc" (#"aBc")) (#"(?=a(?i:b))\\w\\wc" #"Ab " #f) (#"(?=a(?i:b))\\w\\wc" #"abC" #f) (#"(?=a(?i:b))\\w\\wc" #"aBC " #f) (#"(?<=a(?i:b))(\\w\\w)c" #"abxxc" (#"xxc" #"xx")) (#"(?<=a(?i:b))(\\w\\w)c" #"aBxxc" (#"xxc" #"xx")) (#"(?<=a(?i:b))(\\w\\w)c" #"Abxxc" #f) (#"(?<=a(?i:b))(\\w\\w)c" #"ABxxc" #f) (#"(?<=a(?i:b))(\\w\\w)c" #"abxxC " #f) (#"(?i:(blah))\\s+\\1" #"blah blah" (#"blah blah" #"blah")) (#"(?i:(blah))\\s+\\1" #"BLAH BLAH" (#"BLAH BLAH" #"BLAH")) (#"(?i:(blah))\\s+\\1" #"Blah Blah" (#"Blah Blah" #"Blah")) (#"(?i:(blah))\\s+\\1" #"blaH blaH" (#"blaH blaH" #"blaH")) (#"(?i:(blah))\\s+\\1" #"blah BLAH" #f) (#"(?i:(blah))\\s+\\1" #"Blah blah " #f) (#"(?i:(blah))\\s+\\1" #"blaH blah " #f) (#"(?i:(blah))\\s+(?i:\\1)" #"blah blah" (#"blah blah" #"blah")) (#"(?i:(blah))\\s+(?i:\\1)" #"BLAH BLAH" (#"BLAH BLAH" #"BLAH")) (#"(?i:(blah))\\s+(?i:\\1)" #"Blah Blah" (#"Blah Blah" #"Blah")) (#"(?i:(blah))\\s+(?i:\\1)" #"blaH blaH" (#"blaH blaH" #"blaH")) (#"(?i:(blah))\\s+(?i:\\1)" #"blah BLAH" (#"blah BLAH" #"blah")) (#"(?i:(blah))\\s+(?i:\\1)" #"Blah blah " (#"Blah blah" #"Blah")) (#"(?i:(blah))\\s+(?i:\\1)" #"blaH blah " (#"blaH blah" #"blaH")) #"(?>a*)*" #"(abc|)+" #"([a]*)*" #"([ab]*)*" #"([^a]*)*" #"([^ab]*)*" #"([a]*?)*" #"([ab]*?)*" #"([^a]*?)*" #"([^ab]*?)*" #"([^ab]*?)*" #"(?>a*)*" #"(?>a*)*" #"((?>a*))*" #"((?>a*?))*" (#"(?<=(foo))bar\\1" #"foobarfoo" (#"barfoo" #"foo")) (#"(?<=(foo))bar\\1" #"foobarfootling " (#"barfoo" #"foo")) (#"(?<=(foo))bar\\1" #"foobar" #f) (#"(?<=(foo))bar\\1" #"barfoo " #f) (#"(?i:saturday|sunday)" #"saturday" (#"saturday")) (#"(?i:saturday|sunday)" #"sunday" (#"sunday")) (#"(?i:saturday|sunday)" #"Saturday" (#"Saturday")) (#"(?i:saturday|sunday)" #"Sunday" (#"Sunday")) (#"(?i:saturday|sunday)" #"SATURDAY" (#"SATURDAY")) (#"(?i:saturday|sunday)" #"SUNDAY" (#"SUNDAY")) (#"(?i:saturday|sunday)" #"SunDay" (#"SunDay")) (#"(a(?i:bc)|(?i:BB))x" #"abcx" (#"abcx" #"abc")) (#"(a(?i:bc)|(?i:BB))x" #"aBCx" (#"aBCx" #"aBC")) (#"(a(?i:bc)|(?i:BB))x" #"bbx" (#"bbx" #"bb")) (#"(a(?i:bc)|(?i:BB))x" #"BBx" (#"BBx" #"BB")) (#"(a(?i:bc)|(?i:BB))x" #"abcX" #f) (#"(a(?i:bc)|(?i:BB))x" #"aBCX" #f) (#"(a(?i:bc)|(?i:BB))x" #"bbX" #f) (#"(a(?i:bc)|(?i:BB))x" #"BBX" #f) (#"^([ab](?i:[cd])|(?i:[ef]))" #"ac" (#"ac" #"ac")) (#"^([ab](?i:[cd])|(?i:[ef]))" #"aC" (#"aC" #"aC")) (#"^([ab](?i:[cd])|(?i:[ef]))" #"bD" (#"bD" #"bD")) (#"^([ab](?i:[cd])|(?i:[ef]))" #"elephant" (#"e" #"e")) (#"^([ab](?i:[cd])|(?i:[ef]))" #"Europe " (#"E" #"E")) (#"^([ab](?i:[cd])|(?i:[ef]))" #"frog" (#"f" #"f")) (#"^([ab](?i:[cd])|(?i:[ef]))" #"France" (#"F" #"F")) (#"^([ab](?i:[cd])|(?i:[ef]))" #"Africa " #f) (#"^(ab|a(?i:[b-c](?m-i:d))|(?m-i:x(?i:y))|(?i:z))" #"ab" (#"ab" #"ab")) (#"^(ab|a(?i:[b-c](?m-i:d))|(?m-i:x(?i:y))|(?i:z))" #"aBd" (#"aBd" #"aBd")) (#"^(ab|a(?i:[b-c](?m-i:d))|(?m-i:x(?i:y))|(?i:z))" #"xy" (#"xy" #"xy")) (#"^(ab|a(?i:[b-c](?m-i:d))|(?m-i:x(?i:y))|(?i:z))" #"xY" (#"xY" #"xY")) (#"^(ab|a(?i:[b-c](?m-i:d))|(?m-i:x(?i:y))|(?i:z))" #"zebra" (#"z" #"z")) (#"^(ab|a(?i:[b-c](?m-i:d))|(?m-i:x(?i:y))|(?i:z))" #"Zambesi" (#"Z" #"Z")) (#"^(ab|a(?i:[b-c](?m-i:d))|(?m-i:x(?i:y))|(?i:z))" #"aCD " #f) (#"^(ab|a(?i:[b-c](?m-i:d))|(?m-i:x(?i:y))|(?i:z))" #"XY " #f) (#"(?<=(?]&" #"<&OUT" (#"<&")) (#"^(a\\1?){4}$" #"aaaaaaaaaa" (#"aaaaaaaaaa" #"aaaa")) (#"^(a\\1?){4}$" #"AB" #f) (#"^(a\\1?){4}$" #"aaaaaaaaa" #f) (#"^(a\\1?){4}$" #"aaaaaaaaaaa" #f) (#"(?:(f)(o)(o)|(b)(a)(r))*" #"foobar" (#"foobar" #"f" #"o" #"o" #"b" #"a" #"r")) (#"(?<=a)b" #"ab" (#"b")) (#"(?<=a)b" #"cb" #f) (#"(?<=a)b" #"b" #f) (#"(?a+)b" #"aaab" (#"aaab")) (#"([[:]+)" #"a:[b]:" (#":[" #":[")) (#"([[=]+)" #"a=[b]=" (#"=[" #"=[")) (#"([[.]+)" #"a.[b]." (#".[" #".[")) (#"((?>a+)b)" #"aaab" (#"aaab" #"aaab")) (#"(?>(a+))b" #"aaab" (#"aaab" #"aaa")) (#"((?>[^()]+)|\\([^()]*\\))+" #"((abc(ade)ufh()()x" (#"abc(ade)ufh()()x" #"x")) (#"(?>.*)(?<=(abcd|wxyz))" #"alphabetabcd" (#"alphabetabcd" #"abcd")) (#"(?>.*)(?<=(abcd|wxyz))" #"endingwxyz" (#"endingwxyz" #"wxyz")) (#"(?>.*)(?<=(abcd|wxyz))" #"a rather long string that doesn't end with one of them" #f) (#"word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword" #"word cat dog elephant mussel cow horse canary baboon snake shark otherword" (#"word cat dog elephant mussel cow horse canary baboon snake shark otherword")) (#"word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword" #"word cat dog elephant mussel cow horse canary baboon snake shark" #f) (#"word (?>[a-zA-Z0-9]+ ){0,30}otherword" #"word 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) (#"(?<=\\d{3}(?!999))foo" #"999foo" (#"foo")) (#"(?<=\\d{3}(?!999))foo" #"123999foo " (#"foo")) (#"(?<=\\d{3}(?!999))foo" #"123abcfoo" #f) (#"(?<=(?!...999)\\d{3})foo" #"999foo" (#"foo")) (#"(?<=(?!...999)\\d{3})foo" #"123999foo " (#"foo")) (#"(?<=(?!...999)\\d{3})foo" #"123abcfoo" #f) (#"(?<=\\d{3}(?!999)...)foo" #"123abcfoo" (#"foo")) (#"(?<=\\d{3}(?!999)...)foo" #"123456foo " (#"foo")) (#"(?<=\\d{3}(?!999)...)foo" #"123999foo " #f) (#"(?<=\\d{3}...)(?Z)+|A)*" #"ZABCDEFG" (#"ZA" #"A")) #"((?>)+|A)*" #"^[a-\\d]" #"^[\\d-a]" (#"(?<=abc).*(?=def)" #"abcdef" (#"")) (#"(?<=abc).*(?=def)" #"abcxdef" (#"x")) (#"(?<=abc).*(?=def)" #"abcxdefxdef" (#"xdefx")) (#"(?<=abc).*?(?=def)" #"abcdef" (#"")) (#"(?<=abc).*?(?=def)" #"abcxdef" (#"x")) (#"(?<=abc).*?(?=def)" #"abcxdefxdef" (#"x")) (#"(?<=abc).+(?=def)" #"abcdef" #f) (#"(?<=abc).+(?=def)" #"abcxdef" (#"x")) (#"(?<=abc).+(?=def)" #"abcxdefxdef" (#"xdefx")) (#"(?<=abc).+?(?=def)" #"abcdef" #f) (#"(?<=abc).+?(?=def)" #"abcxdef" (#"x")) (#"(?<=abc).+?(?=def)" #"abcxdefxdef" (#"x")) (#"(?<=\\b)(.*)" #"-abcdef" (#"abcdef" #"abcdef")) (#"(?<=\\b)(.*)" #"abcdef" (#"abcdef" #"abcdef")) (#"(?<=\\B)(.*)" #"-abcdef" (#"-abcdef" #"-abcdef")) (#"(?<=\\B)(.*)" #"abcdef" (#"bcdef" #"bcdef")) (#"^'[ab]'" #"'a'" (#"'a'")) (#"^'[ab]'" #"'b'" (#"'b'")) (#"^'[ab]'" #"x'a'" #f) (#"^'[ab]'" #"'a'x" (#"'a'")) (#"^'[ab]'" #"'ab'" #f) (#"^'[ab]'$" #"'a'" (#"'a'")) (#"^'[ab]'$" #"'b'" (#"'b'")) (#"^'[ab]'$" #"x'a'" #f) (#"^'[ab]'$" #"'a'x" #f) (#"^'[ab]'$" #"'ab'" #f) (#"'[ab]'$" #"'a'" (#"'a'")) (#"'[ab]'$" #"'b'" (#"'b'")) (#"'[ab]'$" #"x'a'" (#"'a'")) (#"'[ab]'$" #"'a'x" #f) (#"'[ab]'$" #"'ab'" #f) (#"'[ab]'" #"'a'" (#"'a'")) (#"'[ab]'" #"'b'" (#"'b'")) (#"'[ab]'" #"x'a'" (#"'a'")) (#"'[ab]'" #"'a'x" (#"'a'")) (#"'[ab]'" #"'ab'" #f) (#"ab(?=.*q)cd" #"abcdxklqj" (#"abcd")) (#"a(?!.*$)b" #"ab" #f) (#".{2}[a-z]" #"Axi" (#"Axi")) (#"^12.34" #"12\n34" (#"12\n34")) (#"(?m:^12.34)" #"12\n34" #f) (#"(?s:^12.34)" #"12\n34" (#"12\n34")) (#"(?m:^12.34)" #"12x34" (#"12x34")) (#"(?s:^12.34)" #"12x34" (#"12x34")) (#"^a" #"a\nb\nc" (#"a")) (#"^a$" #"a\nb\nc" #f) (#"(?m:^a)" #"a\nb\nc" (#"a")) (#"(?m:^a$)" #"a\nb\nc" (#"a")) (#"^b" #"a\nb\nc" #f) (#"b$" #"a\nb\nc" #f) (#"^b$" #"a\nb\nc" #f) (#"(?m:^b)" #"a\nb\nc" (#"b")) (#"(?m:b$)" #"a\nb\nc" (#"b")) (#"(?m:^b$)" #"a\nb\nc" (#"b")) (#"(?m:a[^a]^b)" #"a\nb\nc" (#"a\nb")) (#"(?m:a[^a]^b$)" #"a\nb\nc" (#"a\nb")) (#"(?m:a$[^a]^b$)" #"a\nb\nc" (#"a\nb")) (#"(?m:a[^a]^b[^a]^c)" #"a\nb\nc" (#"a\nb\nc")) (#"(?m:^a$[^a]^b$[^a]^c$)" #"a\nb\nc" (#"a\nb\nc")) #"(?())" #"(?(a))" #"(a)(?(\\1))" #"(?(1))" #"(?(1)a|b|c)" #"(?(?=x)a|b|c)" #"(?(?=x)a" #"(?(?=x)a|b" #"(?(?=x)a|b|" (#"(a)?(?(1)12|b12)" #"a12" (#"a12" #"a")) (#"(a)?(?(1)12|b12)" #"b12" (#"b12" #f)) (#"(a)?(?(1)12|b12)" #"b13" #f) (#"(a)?(?(1)|b12)" #"a12" (#"a" #"a")) (#"(a)?(?(1)12)" #"a12" (#"a12" #"a")) (#"(a)?(?(1)12)" #"b12" (#"" #f)) (#"(?(?=a)a12|b12)" #"a12" (#"a12")) (#"(?(?=a)a12|b12)" #"b12" (#"b12")) (#"(?(?=a)a12|b12)" #"c12" #f) (#"(?(?=a)a12|b12)" #"b13" #f) (#"(?(?!a).12|a13)" #"a13" (#"a13")) (#"(?(?!a).12|a13)" #"b12" (#"b12")) (#"(?(?!a).12|a13)" #"c12" (#"c12")) (#"(?(?!a).12|a13)" #"c13" #f) (#"(?(?<=a)12|13)" #"a12" (#"12")) (#"(?(?<=a)12|13)" #"b13" (#"13")) (#"(?(?<=a)12|13)" #"a13" #f) (#"(?(?<=a)12|13)" #"b12" #f) (#"(?(?bytes/latin-1 (format s v)))]) (for-each (lambda (str) (hash-set! ht (string->symbol (string-downcase str)) (vector (byte-pregexp (bformat "\\p{~a}" str)) (pregexp (format "\\p{~a}" str)) (byte-pregexp (bformat "\\p{~a}*" str)) (pregexp (format "\\p{~a}*" str)) (byte-pregexp (bformat "\\P{~a}" str)) (pregexp (format "\\P{~a}" str)) (byte-pregexp (bformat "\\P{~a}*" str)) (pregexp (format "\\P{~a}*" str))))) '("Cn" "Cc" "Cf" "Cs" "Co" "Ll" "Lu" "Lt" "Lm" "Lo" "Nd" "Nl" "No" "Ps" "Pe" "Pi" "Pf" "Pc" "Pd" "Po" "Mn" "Mc" "Me" "Sc" "Sk" "Sm" "So" "Zl" "Zp" "Zs")) (hash-for-each ht (lambda (k v) (let ([bad1 #"\377\377"] [bad2 (regexp-replace #rx#".$" (string->bytes/utf-8 "\U10FFF1") #"\377")] [bad3 (regexp-replace #rx#".$" (string->bytes/utf-8 "\u1234") #"")]) (test #f regexp-match (vector-ref v 0) bad1) (test #f regexp-match (vector-ref v 0) bad2) (test #f regexp-match (vector-ref v 0) bad3) (test #f regexp-match (vector-ref v 1) bad1) (test #f regexp-match (vector-ref v 1) bad2) (test #f regexp-match (vector-ref v 1) bad3) (test #f regexp-match (vector-ref v 4) bad1) (test #f regexp-match (vector-ref v 4) bad2) (test #f regexp-match (vector-ref v 4) bad3) (test #f regexp-match (vector-ref v 5) bad1) (test #f regexp-match (vector-ref v 5) bad2) (test #f regexp-match (vector-ref v 5) bad3) (let ([other (ormap (lambda (e) (and (not (eq? k (char-general-category (integer->char (car e))))) (integer->char (car e)))) kcrl)]) (let* ([s (string other)] [bs (string->bytes/utf-8 s)] [s* (string-append s s s)] [bs* (bytes-append bs bs bs)]) (test #f regexp-match (vector-ref v 0) bs) (test #f regexp-match (vector-ref v 1) s) (test '(#"") regexp-match (vector-ref v 2) bs) (test '("") regexp-match (vector-ref v 3) s) (test (list bs) regexp-match (vector-ref v 4) bs) (test (list s) regexp-match (vector-ref v 5) s) (test (list bs*) regexp-match (vector-ref v 6) bs*) (test (list s*) regexp-match (vector-ref v 7) s*)))))) (let ([try (lambda (n) (let* ([cat (char-general-category (integer->char n))] [v (hash-ref ht cat #f)]) (when v (when just-once? (hash-remove! ht cat)) (let* ([s (string (integer->char n))] [bs (string->bytes/utf-8 s)] [bs* (string->bytes/utf-8 (string-append s s s s s))] [regexp-match* (lambda (p s) (let ([v (regexp-match p (bytes->string/utf-8 s))]) (and v (map string->bytes/utf-8 v))))]) (test (list bs) regexp-match (vector-ref v 0) bs) (test (list bs) regexp-match* (vector-ref v 1) bs) (test (list bs*) regexp-match (vector-ref v 2) bs*) (test (list bs*) regexp-match* (vector-ref v 3) bs*)))))]) (for-each (lambda (e) (let ([start (car e)] [end (cadr e)] [uniform? (caddr e)]) (let loop ([n start]) (try n) (unless (= n end) (loop (if uniform? end (+ n 1))))))) kcrl))) (test '(#" ") regexp-match #px#"\t|\\p{Zs}" " ") (test '(" ") regexp-match #px"\t|\\p{Zs}" " ") (test '(#"\t") regexp-match #px#"\t|\\p{Zs}" "\t") (test '("\t") regexp-match #px"\t|\\p{Zs}" "\t") (test #f regexp-match #px#"\t|\\p{Zs}" "a") (test #f regexp-match #px"\t|\\p{Zs}" "a") ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Check that [\s] doesn't match \s, etc. (let ([test-both (lambda (r bstr arg) (test (and r (list r))regexp-match (byte-pregexp bstr) arg) (test (and r (list (bytes->string/latin-1 r)) ) regexp-match (pregexp (bytes->string/latin-1 bstr)) (bytes->string/latin-1 arg)))]) (test-both #f #"[\\s]" #"a") (test-both #f #"[\\s]" #"s") (test-both #" " #"[\\s]" #" ") (test-both #"a" #"[^\\s]" #"a") (test-both #"s" #"[^\\s]" #"s") (test-both #f #"[^\\s]" #" ")) ;; Check that rx doesn't parse as px: (test '(#"aa" #"a") regexp-match #px#"(a)\\1" #"aa") (test '(#"a1" #"a") regexp-match #rx#"(a)\\1" #"a1") (test '(#"a") regexp-match #px#"\\w" #"aw") (test '(#"w") regexp-match #rx#"\\w" #"aw") (test '(#"0") regexp-match #px#"\\d" #"0w") (test '(#"d") regexp-match #rx#"\\d" #"0d") (test '(#"0") regexp-match #px#"[\\d]" #"0w") (test '(#"d") regexp-match #rx#"[\\d]" #"0d") (test '(#"\\") regexp-match #rx#"[\\d]" #"0\\") ;; Check $: (test '(#"$") regexp-match #px#"\\$" #"a$b") (test '(#"$") regexp-match #rx#"\\$" #"a$b") (test '(#"a$") regexp-match #px#"a\\$" #"a$b") (test '(#"a$") regexp-match #rx#"a\\$" #"a$b") ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs)