このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1362913813/172
#  ●Regular Expressionの使用環境  
#  PHP5 
#   
#  ●検索か置換か?  
#  置換 
#   
#  ●説明  
#  Javaのコメント・文字列を抽出してタグで囲みたいです。 
#  /**/, "", '' が入れ子になってる場合に外側だけ適応するのができません 
#  失敗例 <ダブル>"これは<シングル>'ペン'</シングル>です"</ダブル> 
#  成功例 <ダブル>"これは'ペン'です"</ダブル> 
#   
#  ●対象データ() 
#  /* "hello" 'world' */ 
#  String var="これは'ペン'です"; 
#  String apos='apopo "/* moge'; 
#   
#  ●希望する結果  
#  <コメント>/* "hello" 'world' */</コメント> 
#  String var=<ダブル>"これは'ペン'です"</ダブル>; 
#  String apos=<シングル>'apopo "/* moge'</シングル>; 
# 
# 

'Javaのコメント・文字列を抽出してタグで囲みたいです。'(_文字列,_置換された文字列) :-
        atom_chars(_文字列,Chars),
        '文字ならびからコメント・文字列を抽出してタグで囲む'(Chars,_置換された文字ならび),
        atom_chars(_置換された文字列,_置換された文字ならび).

'文字ならびからコメント・文字列を抽出してタグで囲む'([],[]).
'文字ならびからコメント・文字列を抽出してタグで囲む'([''''|R1],[<,シ,ン,グ,ル,>,''''|L1]) :-
        'シングルクォートの外側入れ子を変換'(R1,L1,R2),!,
        '文字ならびからコメント・文字列を抽出してタグで囲む'(R1,R2).
'文字ならびからコメント・文字列を抽出してタグで囲む'(['"'|R1],[<,ダ,ブ,ル,>,'"'|L1]) :-
        'ダブルクォートの外側入れ子を変換'(R1,L1,R2),!,
        '文字ならびからコメント・文字列を抽出してタグで囲む'(R1,R2).
'文字ならびからコメント・文字列を抽出してタグで囲む'([/,*|R1],[<,コ,メ,ン,ト,>,/,*|L1]) :-
        'コメントの外側入れ子を変換'(R1,L1,R2),!,
        '文字ならびからコメント・文字列を抽出してタグで囲む'(R1,R2).
'文字ならびからコメント・文字列を抽出してタグで囲む'([A|R1],[A|R2]) :-
        '文字ならびからコメント・文字列を抽出してタグで囲む'(R1,R2).

シングルクォートの外側入れ子を変換(L,L1,R) :-
        append(L0,[''''|R],L),
        \+(member('''',R)),
        append(L0,['''',<,/,シ,ン,グ,ル,>|R],L1),!.

ダブルクォートの外側入れ子を変換(L,L1,R) :-
        append(L0,['"'|R],L),
        \+(member('"',R)),
        append(L0,['"',<,/,ダ,ブ,ル,>|R],L1),!.

コメントの外側入れ子を変換(L,L1,R) :-
        append(L0,[*,/|R],L),
        \+(append(_,[*,/|_],R)),
        append(L0,[*,/,<,/,コ,メ,ン,ト,>|R],L1),!.