このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1268979408/908
#  ●実装しようとしている正規表現 
#  ^(\d{1,6})(\.\d+)?$ 
#   
#  PHPのpreg_matchでいえば 
#  preg_match (/^(\d{1,6})(\.\d+)?$/, $subject) 
#   
#  ●正規表現の使用環境 
#  PHP 5.2 
#  ●検索か置換か? 
#  検索 
#  ●説明 
#  整数部が6桁までの数値を許可。 
#  小数点を含む入力を許可。 
#  小数点以下は特に制限しない(DB側の丸め処理に依存) 
#   
#  1234567  × 
#  123456.  × 
#  123456.1 _OK 
#  1.1    OK 
#  0.12・・89 _OK 
#   
#  ●対象データ 
#  説明の項を参照 
#  ●希望する結果 
#  説明の項を参照 
#   

'整数部が6桁までの数値を許可。小数点を含む入力を許可。小数点以下は特に制限しない(DB側の丸め処理に依存)'(_文字列,_前文字列,_検索文字列,_後文字列) :-
        sub_atom(_文字列,_,_,_,_前文字列,_検索文字列,後文字列,L1,L2,L3),
        許可される文字だけで構成(L2),
        最初と最後は数字でなくてはならない(L2),
        検索文字列の前後は数字ではない(L1,L3),
        整数部が6桁まで(L2).

許可される文字だけで構成(L2) :-
        append(_,[A|_],L2),
        \+(検索文字列で許可される文字(A)),!,fail.
許可される文字だけで構成(_).

検索文字列で許可される文字(A) :- digit(A),!.
検索文字列で許可される文字('.').

最初と最後は数字でなくてはならない(L2) :-
        L2 = [H|_],
        digit(H),
        last(L2,LZ),
        digit(LZ).

検索文字列の前後は数字ではない(L1,L3) :-
        \+((last(L1,Z),digit(Z))),
        \+((L3=[H|_],digit(H))).

整数部が6桁まで(L) :-
        append(L0,['.'|R],L),
        ピリオドは一個まで(L0,R),
        '6桁以下'(L0).
整数部が6桁まで(L) :-
        '6桁以下'(L).

ピリオドは一個まで(L0,R) :-
        \+(append(_,['.'|_],L0)),
        \+(append(_,['.'|_],R)).

'6桁以下'(L0) :-
        length(L0,Len),
        Len =< 6,!.