このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1268979408/905
#  ●実装しようとしている正規表現 
#  ^[1-9]\d{3}$ 
#   
#  PHPのpreg_matchでいえば 
#  preg_match (/^[1-9]\d{3}$/, $subject) 
#   
#  ●正規表現の使用環境 
#  PHP 5.2 
#  ●検索か置換か? 
#  検索 
#  ●説明 
#  4桁の西で0000のみを除外したい。 
#  西暦1万年(10000)以上は考慮しない 
#   
#  0000 × 
#  1000〜9999 ○ 
#   
#  ●対象データ 
#  説明の項を参照 
#  ●希望する結果 
#  説明の項を参照 
#   
# 
# 

'4桁の西暦で0000のみを除外したい'(_文字列,_前文字列,_検索文字列,_後文字列) :-
'4桁の西暦で'(_文字列,_前文字列,_検索文字列,_後文字列),
'0000のみ除外したい'(_検索文字列).

'4桁の西暦で'(_文字列,_前文字列,_検索文字列,_後文字列) :-
検索文字列を得る(_文字列,S,R,_検索文字列),
前文字列の最後の文字と後文字列の最初の文字は数字ではない(_文字列,S,R,_前文字列,_検索文字列,_後文字列).

検索文字列を得る(_文字列,S,R,_検索文字列) :-
sub_atom(_文字列,S,4,R,_検索文字列),
全ての文字が数字である(_検索文字列).

全ての文字が数字である(_検索文字列) :-
forall(sub_atom(_検索文字列,_,1,_,_文字),数字(_文字)).

前文字列の最後の文字と後文字列の最初の文字は数字ではない(_文字列,S,R,_前文字列,_後文字列) :-
前文字列の最後の文字は数字ではない(_文字列,S,_前文字列),
後文字列の最初の文字は数字ではない(_文字列,R,_後文字列).

前文字列の最後の文字は数字ではない(_文字列,S,_前文字列) :-
前文字列の(_文字列,S,_前文字列),
最後の文字は数字ではない(_前文字列).

前文字列の(_文字列,S,_前文字列) :-
sub_atom(_文字列,0,S,_,_前文字列).

最後の文字は数字ではない(_後文字列) :-
\+((sub_atom(_後文字列,_,1,0,_文字),数字(_文字))).

後文字列の最初の文字は数字ではない(_文字列,R,_後文字列) :-
後文字列の(_文字列,R,_後文字列),
最初の文字は数字ではない(_後文字列).

後文字列の(_文字列,R,_後文字列) :-
sub_atom(_文字列,_,R,0,_後文字列).

最初の文字は数字ではない(_前文字列) :-
\+((sub_atom(_前文字列,0,1,_,_文字),数字(_文字))).

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

'0000のみ除外したい'(_検索文字列) :-
\+(sub_atom(_検索文字列,0,1,_,'0')).