このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1323566370/765
#  以下の解決方法を教えてください。 
#  ●正規表現の使用環境 
#  emacs-lisp 
#  ●検索か置換か? 
#  検索 
#  ●説明 
#  特定の文字列Aにマッチしないが、文字列BorCにはマッチする文字列を検索したい。 
#  初期状態でregexpは↓のようになっており 
#   "-\\(ring\\|history\\)\\'" 
#  文字列末尾に -ring か -history があればマッチしてしまいます。 
#  この状態を維持しつつ特定の文字列を含む文字列であればマッチさせたくない状況を作りたいです。 
#  ●対象データ 
#  hogehoge-kill-ring 
#  hugahuga-history 
#  user-hogehoge-kill-ring 
#  user-hugahuga-history 
#  hogehoge-user-kill-ring 
#  hugahuga-user-history 
#  ●希望する結果 
#  hogehoge-kill-ring 
#  ^ 
#  hugahuga-history 
#  ^ 
#  だけが難しければ最悪↓も含んでしまってOK 
#  hogehoge-user-kill-ring 
#  ^ 
#  hugahuga-user-history 
#  ^ 
#  以上よろしくお願いします。 
#   
# 
# 

'特定の文字列Aにマッチしないが、文字列BorCにはマッチする検索'(_文字列,_文字列A,_文字列B,_文字列C,_前文字列,_適合文字列,_後文字列) :-
        sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,_,_,_),
        '文字列Aにマッチしない'(_適合文字列,_文字列A),
        '文字列BorCにはマッチする'(_適合文字列,_文字列B,_文字列C).

'文字列Aにマッチしない'(_文字列,_文字列A) :-
        \+(_文字列=_文字列A).

'文字列BorCにはマッチする'(_文字列,_文字列B,_) :-
        _文字列 = _文字列B,!.
'文字列BorCにはマッチする'(_文字列,_,_文字列C) :-
        _文字列 = _文字列C.