35 lines
991 B
Scheme
35 lines
991 B
Scheme
|
|
(module pcre mzscheme
|
|
(require mzlib/foreign)
|
|
(unsafe!)
|
|
|
|
(provide pcregexp
|
|
pcregexp-match)
|
|
|
|
(define pcre-lib (ffi-lib "libpcre"))
|
|
|
|
(define pcre-compile
|
|
(get-ffi-obj "pcre_compile" pcre-lib
|
|
(_fun _bytes _int _bytes _bytes _pointer
|
|
-> _pointer)))
|
|
(define pcre-study
|
|
(get-ffi-obj "pcre_study" pcre-lib
|
|
(_fun _pointer _int _bytes
|
|
-> _pointer)))
|
|
(define pcre-exec
|
|
(get-ffi-obj "pcre_exec" pcre-lib
|
|
(_fun _pointer _pointer _bytes _int
|
|
_int _int _bytes _int
|
|
-> _int)))
|
|
|
|
(define random-vector (make-bytes 100))
|
|
|
|
(define (pcregexp s)
|
|
(let* ([pat (pcre-compile s 0 random-vector random-vector #f)]
|
|
[extra (pcre-study pat 0 random-vector)])
|
|
(cons pat extra)))
|
|
|
|
(define (pcregexp-match re bytes)
|
|
(pcre-exec (car re) (cdr re) bytes (bytes-length bytes)
|
|
0 0 random-vector 10)))
|