Emacs Lisp: Regex Named Character Class and Syntax Table

By Xah Lee. Date: . Last updated: .

In emacs Regular Expression Syntax, the meaning of some named character class such as [[:word:]] is dependent on the current major mode's Syntax Table.

Syntax table is hard to work with, and regex using it may be unpredictable. Best is just to put the chars you want explicitly in your regex, for example, [A-Za-z0-9]+. Use [[:word:]]+ if you need to match letters of western languages and also Chinese characters or Russian characters etc.

Here's a demo, that some regex depend on syntax table.

;; here's a demo, that some elisp regex pattern depend on elisp syntax table.

;; save this file as test.el, and open it.
;; M-x emacs-lisp-mode

;; put cursor right after the paren, and M-x eval-last-sexp
(re-search-forward "[[:space:]]")
;; it'll move cursor to a space

;; now, set space to have word syntax. Eval this
(modify-syntax-entry 32 "w" emacs-lisp-mode-syntax-table)

;; try the search above again. Now it won't find any

After the above, you'll need to restart emacs. Because, now cursor moving commands will consider space as part of word.

Emacs Lisp, Regex in Lisp Code