All notes



Good for testing your regexp.

Construct a regexp interactively. This command makes the current buffer the "target" buffer of the regexp builder.

As you edit the regexp in the "*RE-Builder*" buffer, the matching parts of the target buffer will be highlighted.

M-x re-builder

; To quit:
M-x reb-quit
; Or: C-c C-q

Difference from starndard regexp

\w doesn't include _ syntax class table.

So to match "0___N74R0=", you need: "\\(?:\\w\\|_\\)+="


Why two backslashes are needed?

One escape is parsed when the string is read, another is parsed when creating the regular expression. When you're trying to match a literal backslash '\', you end up having to do it four times '\\\\' because you have to double-slash to match the slash in both the initial string parse and the regular expression parse.

(defun wcfHtmlOccur ()
  "List all html headers in occur buffer."
  (occur "<h[1-6]>.*</h[1-6]>\\|<article>")

; Find in Yaml
"^  [a-zA-Z0-9_]+:"

The “or” operator is \|. Strings and regexps are orthogonal in Emacs Lisp, so if you put a regexp in a string, you need to write e.g. "True\\|False".

Emacs has 2 escaping styles, one in EmacsLisp the other when used in commands, ie. from the M-x prompt (rgrep, occur, ...)

In EmacsLisp, use the double backslash \\|
From M-x ... use a single backslash \|

As a side note, when writing embedded EmacsLisp, for example in yasnippet dynamic expansions, you have to use a quadruple backslash: \\\\| (to escape the double backslashes.)

Always avoid this (if possible), for example in yasnippet you can provide mode related emacslisp, without the additional escaping, via a .yas-setup.el.

For further details, see:

M-: (info "(elisp) Regexp Special") RET