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文字以上の場合
で,これらを `|' で和をとってあげればできあがり!