このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1323566370/103
#  あけましておめでとう 
#   
#  ●正規表現の使用環境 
#  perl5 
#   
#  ●検索か置換か? 
#  置換 
#   
#  ●説明 
#  全角,句読点と半角の間を消したい 
#  半角と半角は無視 
#  ●対象データ 
#  みんなの憧れ Justin Drew Bieber が大好き 
#  私だけの Justin が欲しい 
#  やっぱ Bieber 、Bieber って響きがいいよね 
#   
#  ●希望する結果 
#  みんなの憧れJustin Drew Bieberが大好き 
#  私だけのJustinが欲しい 
#  やっぱBieber、Bieberって響きがいいよね 
#   
#   
#  今までは([ぁ-煕]+)と([0-9A-Za-z]+)を組み合わせて何回もやっていたのですが 
#  例題の1行目の様な物が煩わしいので一括に処理したいです 
#  お願いします 
# 

'全角,句読点と半角の間を消したい。半角と半角は無視'(_文字列,_置換された文字列) :-
        sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3),
        半角に挟まれていない空白の連続ならび(L1,L2,L3),
        '全角,句読点と半角の間を消したい 半角と半角は無視'(_S3,_置換された文字列_2),
        concat_atom([S1,S2,_置換された文字列_2],_置換された文字列),!.
'全角,句読点と半角の間を消したい。半角と半角は無視'(_文字列,_文字列).

半角に挟まれていない空白の連続ならび(L1,L2,L3) :-
        全て空白(L2),
        \+((last(L1,A),半角文字(A),L3=[C|_],半角文字(C))).

全て空白([]).
全て空白([' '|R]) :-
        全て空白(R).

半角文字(' ') :- !,fail.
半角文字(_文字) :-
        char_code(_文字,_文字コード),
        _文字コード < 256.