このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1362913813/370
#  ●Regular Expressionの使用環境 
#  ActivePerl5.8 
#   
#  ●検索か置換か? 
#  検索 
#   
#  ●説明 
#  連続する数を検索したい(1965から2011までの数) 
#   
#  ●対象データ(配列内に格納) 
#  1952 
#  1965 
#  1986 
#  2012 
#  1972 
#  2011 
#   ・ 
#   ・ 
#  ●希望する結果(配列の各要素を正規表現で検索して、マッチする要素だけ抽出) 
#  1965 
#  1986 
#  1972 
#  2011 
#   ・ 
#   ・ 
#   
#  配列の各要素が1955から2011までの数の場合にマッチする正規表現を教えてください 
# 
# 


'●検索か置換か?
検索

●説明
連続する数を検索したい(1965から2011までの数) 
 
●対象データ(配列内に格納)
1952
1965
1986
2012
1972
2011
 ・
 ・
●希望する結果(配列の各要素を正規表現で検索して、マッチする要素だけ抽出)
1965
1986
1972
2011
 ・
 ・'(_文字列,_前文字列,_適合文字列,_後文字列) :-
        '連続する数を検索したい(1965から2011までの数)'(_文字列,_前文字列,_適合文字列,_後文字列).


'連続する数を検索したい(1965から2011までの数)'(_文字列,_前文字列,_適合文字列,_後文字列) :-
        atom_chars(_文字列,_文字ならび),
        '文字ならびから連続する数を検索したい(1965から2011までの数)'(_文字ならび,_前文字列,_適合文字列,_後文字列).

'文字ならびから連続する数を検索したい(1965から2011までの数)'(_文字ならび,_前文字列,_適合文字列,_後文字列) :-
        '数値を切り出す(1965から2011までの数)'(_文字ならび,L1,L2,L3,N),
        atom_chars(_前文字列,L1),
        atom_chars(_後文字列,L3),
        atom_chars(_適合文字列,L2).

'数値を切り出す(1965から2011までの数)'(_文字ならび,L1,L2,L3,N) :-
        append(L1,L2,L3,_文字ならび),
        全てが数字(L2),
        'L1の最後の文字とL3の最初の文字は数字ではない'(L1,L3),
        number_chars(_数,L2),
        '1965から2011までの数'(_数).


全てが数字(_ならび) :-
        forall(member(_数字,_ならび),数字(_数字)).

数字(_数字) :-
        _数字 @>= '0',
        _数字 @=< '9'.

'L1の最後の文字とL3の最初の文字は数字ではない'(L1,L3) :-
        'L1の最後の文字は数字ではない'(L1),
        'L3の最初の文字は数字では無い'(L3).

'L1の最後の文字は数字ではない'(L1) :-
        \+((last(L1,A),数字(A))).

'L3の最初の文字は数字では無い'(L3) :-
        \+(([B|_]=L3,数字(B))).

'1965から2011までの数'(_数) :-
        between(1965,2011,_数).