マルチバイト文字の正規表現

マルチバイト文字は無理なのかと勘違いしてたけど、色々やってたら普通に出来た。[a-z]見たいな感じで[a-z]で何の

■全角の正規表現

  • [0-9]:全角数字
  • [a-z]:全角アルファベットのa〜z
  • [A-Z]:全角アフファベットのA〜Z
  • [ぁ-ん]:あいうえおの50音 *1
  • [ァ-ヶ]:カタカナ

 [ァ-ヶ]は調べたら書いてあっただけなので自分は試してないけど問題もない様子。

ついでにマルチバイト文字と普通の文字を識別したい、コレを直したの、マルチバイトの文字列を間違って使ってなんかエラーが出て動かないとか、そういうのを防ごうかと思って、適当に作ってみた奴。

■具体的にすること

  • *multi-byte-number-notifier*
  • *multi-byte-symbol-notifier*
  • *multi-byte-alphabet-notifier*

で夫々指定した正規表現の文字を、設定した色で色づけするとか。単にそれだけ。オンオフを切り替えるスイッチくらい付けたらよかったのかもしれないが、適当に必要そうなモードとかのhookとかで呼び出しが楽そうに思ってみたり。

;;; multi byte notifier
;; var
(defvar *multi-byte-number-notifier*
  '("[0-9]" t (:keyword 1) t))

(defvar *multi-byte-symbol-notifier*
  '("[;:−+*=^|¥<>?!”#$%&’(){}]"
	t (:keyword 1)  t))

(defvar *multi-byte-alphabet-notifier*
  '("[a-zA-Z]"
	t (:keyword 1) t))

;; check and set
(defvar *multi-byte-notifier*
	  (compile-regexp-keyword-list
	   (let (regexp-list)
	  (if *multi-byte-number-notifier*
		  (push *multi-byte-number-notifier* regexp-list))
	  (if *multi-byte-symbol-notifier*
		  (push *multi-byte-symbol-notifier* regexp-list))
	  (if *multi-byte-alphabet-notifier*
		  (push *multi-byte-alphabet-notifier*  regexp-list)))
	   ))

(defun multi-byte-notifier()
  (interactive)
  (unless (local-variable-p 'regexp-keyword-list)
	(make-local-variable 'regexp-keyword-list))
  (setq regexp-keyword-list
		(append regexp-keyword-list *multi-byte-notifier*)))

*1:[あ-ん]だと「ぁ」が選ばれてない様子