Match exactly one of the @var{rx}s, trying from left to right.
Without arguments, the expression will not match anything at all.@*
Corresponding string regexp: @samp{@var{A}\|@var{B}\|@dots{}}.
+
+@item @code{unmatchable}
+@cindex @code{unmatchable} in rx
+Refuse any match. Equivalent to @code{(or)}.
+@xref{regexp-unmatchable}.
@end table
@subsubheading Repetition
@c Internal functions: regexp-opt-group
+@anchor{regexp-unmatchable}
@defvar regexp-unmatchable
This variable contains a regexp that is guaranteed not to match any
string at all. It is particularly useful as default value for
matches the empty string, each being an identity for the operation.
This also works for their aliases: '|' for 'or'; ':', 'and' and
'sequence' for 'seq'.
+The symbol 'unmatchable' can be used as an alternative to (or).
---
*** 'regexp' and new 'literal' accept arbitrary lisp as arguments.
(get name 'rx-definition)))
;; TODO: Additions to consider:
-;; - A name for (or), maybe `unmatchable'.
;; - A construct like `or' but without the match order guarantee,
;; maybe `unordered-or'. Useful for composition or generation of
;; alternatives; permits more effective use of regexp-opt.
;; since the return value may be mutated.
((or 'nonl 'not-newline 'any) (cons (list ".") t))
((or 'anychar 'anything) (rx--translate-form '(or nonl "\n")))
+ ('unmatchable (rx--empty))
((or 'bol 'line-start) (cons (list "^") 'lseq))
((or 'eol 'line-end) (cons (list "$") 'rseq))
((or 'bos 'string-start 'bot 'buffer-start) (cons (list "\\`") t))
"List of built-in rx function-like symbols.")
(defconst rx--builtin-symbols
- (append '(nonl not-newline any anychar anything
+ (append '(nonl not-newline any anychar anything unmatchable
bol eol line-start line-end
bos eos string-start string-end
bow eow word-start word-end
or a character class.
not-newline Match any character except a newline. Alias: nonl.
anychar Match any character. Alias: anything.
+unmatchable Never match anything at all.
CHARCLASS Match a character from a character class. One of:
alpha, alphabetic, letter Alphabetic characters (defined by Unicode).
(ert-deftest rx-atoms ()
(should (equal (rx anychar anything)
"\\(?:.\\|\n\\)\\(?:.\\|\n\\)"))
+ (should (equal (rx unmatchable)
+ "\\`a\\`"))
(should (equal (rx line-start not-newline nonl any line-end)
"^...$"))
(should (equal (rx bol string-start string-end buffer-start buffer-end