1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 18:40:39 -08:00

Use [^z-a] for matching any character (anychar/anything) in rx

* lisp/emacs-lisp/rx.el (rx--translate-symbol):
* test/lisp/emacs-lisp/rx-tests.el (rx-any, rx-atoms):
Use [^z-a] instead of ".\\|\n" for anychar.

The new expression is faster (about 2×) and does not allocate regexp
stack space.  For example, (0+ anychar) now matches strings of any
size (bug#37659).
This commit is contained in:
Mattias Engdegård 2019-10-09 10:22:10 +02:00
parent ae5407b857
commit 6331d23de3
2 changed files with 4 additions and 4 deletions

View file

@ -126,9 +126,9 @@
(should (equal (rx (not (any "!a" "0-8" digit nonascii)))
"[^!0-8a[:digit:][:nonascii:]]"))
(should (equal (rx (any) (not (any)))
"\\`a\\`\\(?:.\\|\n\\)"))
"\\`a\\`[^z-a]"))
(should (equal (rx (any "") (not (any "")))
"\\`a\\`\\(?:.\\|\n\\)")))
"\\`a\\`[^z-a]")))
(ert-deftest rx-pcase ()
(should (equal (pcase "a 1 2 3 1 1 b"
@ -185,7 +185,7 @@
(ert-deftest rx-atoms ()
(should (equal (rx anychar anything)
"\\(?:.\\|\n\\)\\(?:.\\|\n\\)"))
"[^z-a][^z-a]"))
(should (equal (rx unmatchable)
"\\`a\\`"))
(should (equal (rx line-start not-newline nonl any line-end)