?- 'a##'. seikihyogen9-606#
このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1323566370/606
#  問い合せフォームから来たメールアドレスを正規表現を用いて抽出したいのですが 
#  秀丸メールを使っておりメール全文をテキスト化したものの中に以下の文章が含まれています 
#   
#  ▼メールアドレス 
#  aaaaaaaaaa@aaaaaaaaa.com 
#   
#  ▼メールアドレスという文字列の下にある行だけを検索することは可能でしょうか? 
#   
#  メールアドレスにマッチする正規表現を使用するとヘッダー内のよくわからないアドレスまで抽出されてしまい 
#  とても面倒くさいのでどうにか文章の下にある行のみを抽出という手段を取りたいのです 
#   
#  どうか解決策をご教授ください 
#   

'▼メールアドレスという文字列の下にある行だけを検索する'(_文字列,_前文字列,_下にある行,_後文字列,_メールアドレスならび) :-
        sPLIT(_文字列,['\n'],L),
        '▼メールアドレスという文字列の下にある行'(L,_前文字列,_下にある行,_後文字列),
        メールアドレスを検索(_下にある行,_メールアドレスならび).

'▼メールアドレスという文字列の下にある行'(L,_前文字列,_下にある行,_後文字列) :-
        append(L0,[A,'\n',_下にある行,'\n'|R],L),
        sub_atom(A,_,8,_,'▼メールアドレス'),
        concat_atom(L0,S1),
        concat_atom([S1,A,'\n'],_前文字列),
        concat_atom(R,_後文字列).

メールアドレスを検索(_行,_メールアドレスならび) :-
        findall(S2,(
                    sub_atom(_行,_,_,_,S1,S2,S3,L1,L2,L3),
                    メールアドレス形式(S2),
                    前後がアルファベットでない(S1,S3)),
                _メールアドレスならび).

メールアドレス形式(S) :-
        split(S2,['@'],[U1,U2]),
        アルファベット(A),
        アルファベット(B).

前後がアルファベットでない(S1,S3) :-
        \+((last(S1,A),アルファベット(A))),
        \+((sub_atom(S3,0,1,_,B),アルファベット(B))).

アルファベット('-') :- !.
アルファベット('_') :- !.
アルファベット('~') :- !.
アルファベット(A) :-
        A @>= '0',
        A @=< '9',!.
アルファベット(A) :-
        A @>= 'A',
        A @=< 'Z',!.
アルファベット(A) :-
        A @>= 'a',
        A @=< 'z',!.