Hello, rx.el of the latest Emacs (23.0.60) has several problems. I fixed them and attach a tar file including the following. rx.diff - diff file rx-new.el - new replacement of rx.el (as many changes) rx-test.el - for simple output of original and fixed RX.txt - test output of mine (not by the above) Changelog Fixed problems are as follows: * (NOT CHAR-CLASS-SYMBOL) cause an error. (rx (not word)) => (error "rx `not' syntax error: word") (rx (not digit)) => (error "rx `not' syntax error: digit") * "^" in ANY produce a unnecessary escape or incorrect result. (rx (any "^")) => "[\\^]" (rx (not (any "^"))) => "[^\\^]" (rx (any ?^ ?a)) => "[\\^a]" (rx (any ?a ?^)) => "[a\\^]" * "]", "-" in ANY produce incorrect result. (rx (any ?- ?a ?\])) => "[]-a]" (rx (any "--]")) => "[]--]" * NOT-NOT-ANY produce incorrect result for special characters. (rx (not (not (any ".")))) => "." * NOT-WORDCHAR is incorrectly treated as character class. NOT-WORDCHAR should not be defined as a character class. (rx (any ascii not-wordchar)) => "[[:ascii:]^[:word:]]" * ANY accept syntax symbols and produce an senseless result. (rx (any symbol-start symbol-end)) => "[__]" (rx (any word-boundary)) => "[]" * NOT-NOT to symbol produce an incorrect result. (rx (not (not word-boundary))) => "[^\\B]" (rx (not (not (syntax word)))) => "[^\\Sw]" * Rx produce unnecessary shy groups easily. (rx (or (and "a" "b") (and "b" "c"))) => "\\(?:\\(?:ab\\)\\|\\(?:bc\\)\\)" * ANYTHING always produce shy groups even when unnecessary. (rx anything) => "\\(?:.\\|\n\\)" (rx (or anything "abc")) => "\\(?:\\(?:.\\|\n\\)\\|abc\\)" * NO-GROUP in `rx-to-string' doesn't work as documented, or is ambiguously defined. (rx-to-string "ab" t) => "ab" (rx-to-string "ab" nil) => "ab" (rx-to-string '(and "a" "b") t) => "\\(?:ab\\)" (rx-to-string '(and "a" "b") nil) => "\\(?:ab\\)" Regards, Shigeru