このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1323566370/775
#  ●正規表現の使用環境 
#  PCRE 
#   
#  ●検索か置換か? 
#  置換 
#   
#  ●説明 
#  <tag>から</tag>内の文字列abcをABCへ置換したい 
#   
#  ●対象データ 
#  xabcxxx<tag>abcxxxxxxxxxxxabcxxxxxxxabcxx</tag>xxxxabcxxxabcxx 
#  xabcxxx<tag>abc</tag>xxxxaxxxxxxxabcxxcxxxxx<tag>abcxx</tag>xxx 
#   
#  ●希望する結果 
#  xabcxxx<tag>ABCxxxxxxxxxxxABCxxxxxxxABCxx</tag>xxxxabcxxxabcxx 
#  xabcxxx<tag>ABC</tag>xxxxaxxxxxxxabcxxcxxxxx<tag>ABCxx</tag>xxx 
#   
# 
# 

'<tag>から</tag>内の文字列abcをABCへ置換したい'(_文字列,_タグ,_置換された文字列) :-
        タグと終了タグ文字ならび(_タグ,_タグ文字ならび,_終了タグ文字ならび),
        sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3),
        append(L1_1,_タグ文字ならび,L1),
        append(_終了タグ文字ならび,R3,L3),
        タグまたは終了タグを含まない(L2,_タグ文字ならび,_終了タグ文字ならび),
        abcをABCへ置換(S2,S2_2),
        '<tag>から</tag>内の文字列abcをABCへ置換したい'(S3,_置換された文字列_2),
        atomic_list_concat([S1,S2_2,_置換された文字列_2],_置換された文字列),!.
'<tag>から</tag>内の文字列abcをABCへ置換したい'(_文字列,_文字列).

タグと終了タグ文字ならび(_タグ,_タグ文字ならび,_終了タグ文字ならび) :-
        atom_chars(_タグ,Chars),
        append([<],Chars,[>],_タグ文字ならび),
        append([<,/],Chars,[>],_終了タグ文字ならび),!.

タグまたは終了タグを含まない(L,L1,L2) :-
        \+(append(_,L1,_,L)),
        \+(append(_,L2,_,L)).

abcをABCへ置換(_文字列,_置換された文字列) :-
        sub_atom(_文字列,_,_,_,S1,abc,S3,_,_,_),
        abcをABCへ置換(S3,_置換された文字列_2),
        atomic_list_concat([S1,'ABC',_置換された文字列_2],_置換された文字列),!.
abcをABCへ置換(_文字列,_文字列).