このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1301067486/79
#  aaa=bbb;ccc=ddd;eee=fff 
#   
#  という感じの文字列からcccの値dddを取得したいです。 
#  dddは可変でその部分にはセミコロンとカンマは入ることはありません。 
#  (セミコロンは区切りとしては使いますが値としては使いません。) 
#  cccは最後に書かれてる場合もあり、その場合は、 
#  上記のeee=fffのように最後にセミコロンがつきません。 
#   
#  そこで正規表現なんですが、 
#  ccc=(.*?;|[^;\,]+$) 
#  という感じにしました。 
#  後方参照で()内の部分を取り出したとき、 
#  ccc=ddd;のときは、「ddd;」といった感じにセミコロンつきで取得され、 
#  ccc=dddのときは、「ddd」といった感じにセミコロンなしで取得されます。 
#  ccc=ddd;のときでもセミコロンなしで取得したいのですが、 
#  正規表現のみで可能でしょうか? 
# 
# 

'aaa=bbb;ccc=ddd;eee=fffという感じの文字列からcccの値dddを取得したい'(_文字列,_前文字列,_適合文字列,_後文字列) :-
        sub_atom(_文字列,_,_,_,S1,S2,後文字列,L1,L2,L3),
        sub_atom(S1,_,1,0,C1),
        セミコロンかカンマ(C1),
        sub_atom(_後文字列,0,1,_,C2),
        セミコロンかカンマ(C2),
        セミコロンかカンマを含まない(L2),
        split(S2,['='],[S2_1,_適合文字列]),
        concat_atom([S1,S2_1,'='],_前文字列).

セミコロンかカンマ(';').
セミコロンかカンマ(',').

セミコロンかカンマを含まない([]).
セミコロンかカンマを含まない([A|R]) :-
        \+(A = ';'),
        \+(A = ','),
        セミコロンかカンマを含まない(R).