このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1323566370/41
#  ●正規表現の使用環境  
#  c#  
#   
#  ●検索か置換か?  
#  検索 
#   
#  ●説明  
#  一番長い数字の連続を検索したいです 
#   
#  ●対象データ  
#  hogehoge120_hoge001218hoge1 
#   
#  ●希望する結果  
#  001218 
# 
# 

一番長い数字の連続を検索したいです(_文字列,_前文字列,_適合文字列,_後文字列) :-
        '数字文字列の位置・長さの選択'(_文字列,L),
        最大長の数字文字列(L,_文字列,_前文字列,_適合文字列,_後文字列).

'数字文字列の位置・長さの選択'(_文字列,L) :-
        findall([P2,P1,P3],(
                    sub_atom(_文字列,P1,P2,P3,S1,S2,S3,L1,L2,L3),
                    全て数字(L2),
                    \+((last(L1,A),数字(A))),
                    \+((L3=[B|_],数字(B)))),
                L).

最大長の数字文字列(L,_文字列,_前文字列,_適合文字列,_後文字列) :-
        max(L,[_最大長,_,_]),
        member([_最大長,P1,P3],L),
        文字列の切り取り(_文字列,P1,_最大長,P3,_前文字列,_適合文字列,_後文字列).

文字列の切り取り(_文字列,P1,P2,P3,_前文字列,_適合文字列,_後文字列) :-
        sub_atom(_文字列,P1,P2,P3,_適合文字列),
        sub_atom(_文字列,0,P1,_,_前文字列),
        sub_atom(_文字列,P1+P2,_,0,_後文字列).

数字(A) :-
        member(A,['0','1','2','3','4','5','6','7','8','9']).

全て数字([]).
全て数字([A|R]) :-
        数字(A),
        全て数字(R).