このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1323566370/461
#  ●正規表現の使用環境 
#  linux 2.6系 grep / Scientific Linux 6.1 
#   
#  ●検索か置換か? 
#  検索 
#   
#  ●説明 
#  IPアドレス(xxx.xxx.xxx.xxx IPv4)にヒットさせたい 
#   
#  ●対象データ 
#  192.168.0.1 
#  255.255.255.0 
#  999.999.999.999(注:IPアドレスとして許容されていない) 
#   
#  ●試した正規表現 
#  "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" 
#   
#  今回の検索では目視で判別できましたが、 
#  999.999.999.999←これにヒットしてしまう等、致命的な部分があります。 
#   
#  ご教示いただければ幸いです。 
#   
# 
# 

'IPアドレス(xxx.xxx.xxx.xxx IPv4)にヒットさせたい'(_文字列,_前文字列,_適合文字列,_後文字列) :-
        sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3),
        数字とピリオドのみ(L2),
        \+((last(L1,A),数字(A))),
        \+((L3=[B|_],数字(B))),
        split(_適合文字列,['.'],[N1,N2,N3]),
        'IPアドレス範囲'([N1,N2,N3]).

数字とピリオドのみ([]).
数字とピリオドのみ([A|R]) :-
        member(A,['.','0','1','2','3','4','5','6','7','8','9']),
        数字とピリオドのみ(R).

'IPアドレス範囲'([]).
'IPアドレス範囲'([N|R]) :-
        N >= 0,
        N =< 255,
        'IPアドレス範囲'(R).