Function: dired-glob-regexp
dired-glob-regexp is a byte-compiled function defined in dired.el.gz.
Signature
(dired-glob-regexp PATTERN)
Documentation
Convert glob-pattern PATTERN to a regular expression.
Source Code
;; Defined in /usr/src/emacs/lisp/dired.el.gz
(defun dired-glob-regexp (pattern)
"Convert glob-pattern PATTERN to a regular expression."
(let ((matched-in-pattern 0) ;; How many chars of PATTERN we've handled.
regexp)
(while (string-match "[[?*]" pattern matched-in-pattern)
(let ((op-end (match-end 0))
(next-op (aref pattern (match-beginning 0))))
(setq regexp (concat regexp
(regexp-quote
(substring pattern matched-in-pattern
(match-beginning 0)))))
(cond ((= next-op ??)
(setq regexp (concat regexp "."))
(setq matched-in-pattern op-end))
((= next-op ?\[)
;; Fails to handle ^ yet ????
(let* ((set-start (match-beginning 0))
(set-cont
(if (= (aref pattern (1+ set-start)) ?^)
(+ 3 set-start)
(+ 2 set-start)))
(set-end (string-search "]" pattern set-cont))
(set (substring pattern set-start (1+ set-end))))
(setq regexp (concat regexp set))
(setq matched-in-pattern (1+ set-end))))
((= next-op ?*)
(setq regexp (concat regexp ".*"))
(setq matched-in-pattern op-end)))))
(concat "\\`"
regexp
(regexp-quote
(substring pattern matched-in-pattern))
"\\'")))