このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1301067486/121
#  ●正規表現の使用環境 
#  Apache RewriteRule 
#   
#  ●検索か置換か? 
#  検索 
#   
#  ●説明 
#  1〜5つのカンマ区切りの単語を一致させたい 
#  連結数は不定 
#   
#  ●対象データ 
#  apple 
#  apple,orange,pineapple,grape,melon 
#  orange,pineapple,melon 
#   
#  ●希望する結果 
#  ○apple 
#  ○orange,pineapple,melon 
#  × ,apple 
#   
#  不定数連結されたパターンに悩んでいます 
#   

'1〜5つのカンマ区切りの単語を一致させたい'(_文字列,_前文字列,_適合文字列,_後文字列) :-
        'カンマを0-4個含むアルファベット文字列'(_文字列,_前文字列,_適合文字列,_後文字列),
        カンマは独立して4個以内で先頭と末尾はカンマではない(_適合文字列).

'カンマを0-4個含むアルファベット文字列'(_文字列,_前文字列,_適合文字列,_後文字列) :-
        sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3),
        アルファベットならび(L1,L2,L3).

アルファベットならび([],L2,[]) :-
        全ての要素がアルファベット(L2),!.
アルファベットならび([],L2,[A|_]) :-
        全ての要素がアルファベット(L2),
        \+(アルファベット(A)),!.
アルファベットならび(L1,L2,L3) :-
        last(L1,A),
        L3 = [B|_],
        \+(アルファベット(A)),
        \+(アルファベット(B)),
        全ての要素がアルファベット(L2),!.

全ての要素がアルファベット(L2) :-
        \+((append(_,[A|_],L2),アルファベット(A))).

アルファベット(A) :-
        char_code(A,Code),
        Code > 32.

カンマは独立して4個以内で先頭と末尾はカンマではない(_適合文字列) :-
        sPLIT(_適合文字列,[','],L),
        count(append(_,[','|_],L),N),
        N =< 4,
        カンマは独立して(L),
        先頭はカンマでない(L),
        末尾はカンマでない(L).

カンマは独立して(L) :-
        \+(append(_,[',',','|_],L)),!.

先頭はカンマでない(L) :-
        \+([','|_]=L).

末尾はカンマでない(L) :-
        \+(append(_,[','],L)).