このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1268979408/678
#  ●正規表現の使用環境 
#  Devas(ディレクトリ内の再帰検索及び置換ソフトでGrep互換) 
#   
#  ●検索か置換か? 
#  検索と置換 
#   
#  ●説明 
#  HTMLのaタグにonclick属性を追加,または追記したい 
#   
#  ●対象データ 
#  数百のSmartyテンプレート 
#  (HTMLやフレームワークのコードを含む文字列) 
#  単純に<a hrefで始まるものばかりではなく,<a class等で始まるものもある 
#   
#  ●希望する結果 
#  htmlのaタグから 
#  href="xxxxx-regist"を含んでおり, 
#  かつonclick="xxx"含んでいる または 含んでいないものを検索,置換し 
#  onclickにアクションを追加または追記 
#   
#  <a href="xxx-regist" onclick="追加または追記したい"> 
#   
#   
#   
#  対象ページが数百もあり,とても手作業で修正できないため正規表現の力を借りたいです 
#  aタグはすぐにhrefで始まるものばかりではないため,以下のような正規表現を考えたのですが, 
#  なぜか複数行に渡ってしまう結果が抽出されたりとうまくいきません 
#   
#  href=".+\-regist".+?(onclick="(.+)")?.+?\n 
#   
#   
#  ご教授いただけないでしょうか・・ 
# 
# 

数百のSmartyテンプレートのonclickタグを追加または変更する(_ファイル名ならび) :-
        append(_,[_ファイル|R],_ファイル名ならび),
        'htmlのaタグからhref="xxxxx-regist"を含んでおり,かつonclick="xxx"含んでいる。または含んでいないものを検索,置換しonclickにアクションを追加または追記'(_ファイル),
        R = [],!.        

'htmlのaタグからhref="xxxxx-regist"を含んでおり,かつonclick="xxx"含んでいる。または含んでいないものを検索,置換しonclickにアクションを追加または追記'(_ファイル) :-
        get_chars(_ファイル,Chars),
        'onclickにアクションを追加または追記'(Chars),!.

'onclickにアクションを追加または追記'(Chars) :-
        'aタグを選別'(Chars,L0,R1,R2,_Atag),
        'onclick要素候補'(_Atag,_onclick要素候補),
        'onclick句の生成'(_onclick要素候補,_onclick句),
        put_chars(L0),
        '現在のonclick句の削除'(R1,R11),
        append(R11,_onclick句,R12),
        put_chars(['<',a,' '|R12]),
        put_chars(['<','/',a,'>']),
        'onclickにアクションを追加または追記'(R2).

'aタグを選別'(Chars,L0,R1,R2,_Atag) :-
        append(L0,['<',a,' '|R1],['<','/',a,'>'|R2],Chars),
        \+(append(_,['<','a',' '|_],R1)),
        \+(append(_,['<','/',a,'>'|_],R1)),
        _Atag = ['<',a',' '|R1].

'onclick要素候補'(_Atag,_onclick要素候補) :-
        append(L0,[h,r,e,f,'=','"'|_onclick要素候補],['-',r,e,g,i,s,t,'"'|R2],_Atag),!.

'onclick句の生成'(_onclick要素候補,_onclick句) :-
        append([' ',o,n,c,l,i,c,k,'=','"'|_onclick要素候補],['"',' '],_onclick句).

'現在のonclick句の削除'([],[]) :- !.
'現在のonclick句の削除'([' ',o,n,c,l,i,c,k,'=','"'|R1],[' '|R2]) :-
        append(_,['"',' '|R2],R1),!.
'現在のonclick句の削除'([A|R1],[A|R2]) :-
        '現在のonclick句の削除'(R1,R2).