foo.java にマッチしない正規表現

どうもどうも。
スクワットしたらテンション上がってやってみるかと思い,
やってみました。
あー,ちなみに,↓のエントリの,「*.java 」以外にマッチする正規表現の件です。

結論

(^[^.]{1,}$)|(\..{1,3}$)|(\.((([^j].|j[^a]).|ja[^v]).|jav[^a])$)|(\..{5,}$)

たぶんこれでいけるはず。

お試し

Meadow 内でお試ししました。

(setq s "\\(^[^.]\\{1,\\}$\\)\\|\\(\\..\\{1,3\\}$\\)\\|\\(\\.\\(\\(\\([^j].\\|j[^a]\\).\\|ja[^v]\\).\\|jav[^a]\\)$\\)\\|\\(\\..\\{5,\\}$\\)")

(string-match s "foo.java") => nil
(string-match s "bar.tex") => 3
(string-match s "buzz.html") => 4
(string-match s "*Occur*") => 0
(string-match s ".java") => nil

一応期待した通りになっているようです。

思考過程

(string-match "^[^.]\\{1,\\}$" ".tex")    ; `.' を含まない任意の文字列
(string-match "\\..\\{1,3\\}$" ".tex")    ; 拡張子が1文字〜3文字の場合
;; 拡張子が4文字で java 以外の場合
(string-match "\\.\\(\\(\\([^j].\\|j[^a]\\).\\|ja[^v]\\).\\|jav[^a]\\)" ".html")
(string-match "\\..\\{5,\\}$" "foo.jjava")   ; 拡張子が5文字以上の場合

で,これらを `|' で和をとってあげればできあがり!

オチ

やりたいことは,java のソースを弄っているときに,
auto-complete-mode の,ac-dabbrev.el で,対象を java のソースだけに
したかったわけで。
けどね,なんかしらんが,*Message* バッファに,

Scanning `*Completions*'
Scanning `*grep*'

の様に出力されるわけで,
java のソース以外を見に行っている様に見えるわけで。


次回! その原因に迫る!! か,誰かに教えてもらう。