5

一般に、優れたrxマクロを使用して読み取り可能な正規表現を作成し、正しいメタ文字をエスケープしたことを確認できます。

(rx (any "A-Z")) ;; "[A-Z]"

ただし、恥ずかしがり屋のグループを作成する方法がわかりません\(?:AB\)rx出力でそれらを生成することがあります。

(rx (or "ab" "bc")) ;; "\\(?:ab\\|bc\\)"

しかし、明示的に追加したいと思います。できます:

(rx (regexp "\\(?:AB\\)"))

しかし、これは のポイントを無効にしrxます。

完璧な世界では、次のように書けるようになりたいです。

(rx (shy-group "A"))

私はこのようなものに落ち着きます(これらのどれも機能しません):

;; sadly, `regexp` only accepts literal strings
(rx (regexp (format "\\(?:%s\\)" (rx WHATEVER))))

;; also unfortunate, `eval` quotes the string it's given
(rx (eval (format "\\(?:%s\\)" (rx WHATEVER))))

を使用して恥ずかしがり屋のグループで正規表現を作成するにはどうすればよいrxですか?

4

2 に答える 2

5

フォームの構造により、恥ずかしがり屋のグループを明示的に作成する必要がなくなると思いますrx。恥ずかしがり屋のグループが必要になる可能性があるすべてのことは、他の構文によって説明されます。

たとえば、あなた自身の例:

(rx (or "ab" "bc")) ;; "\\(?:ab\\|bc\\)"
于 2013-06-13T23:18:12.687 に答える