このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1268979408/833
#  ●正規表現の使用環境 
#  C 
#   
#  ●説明 
#  Apacheのログから一部分を抜き出して検索したい 
#   
#  ●対象データ 
#  host.ne.jp - - [11/May/2011:12:22:15 +0900] "GET /~akasata/index.xml?gat=tPFnlVCP8aUYq8jjPqA=&BSdebug=AV/w3.3r1.1/ HTTP/1.1"  
#  200 6703 "https://server.ne.jp/" "Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14" 
#  (以上1行) 
#  ●希望する結果 
#  1件目 
#  host.ne.jp 
#  2件目 
#  /~akasata/index.xml 
#   
#  以上のような検索を実装しようとして、 
#   regerror(regcomp(&preg, "(.+) - [^[] \\[.+\\] \"[^\" ]+ ((/~akasata/[^\"]+)\\?g.+)*([^\"]+) [^\" ]+\".+", REG_EXTENDED|REG_NEWLINE), &preg, errbuf, sizeof(errbuf)); 
#  以下のような正規表現を用いた(Cのエスケープが混じっているため見辛ければすいません)のですが、 
#  後ほど検索対象を調べて一部不要な部分があったため 
#   regerror(regcomp(&preg, "(.+) - [^[] \\[.+\\] \"[^\" ]+ ((/~akasata/[^\"]+)\\?g.+) [^\" ]+\".+", REG_EXTENDED|REG_NEWLINE), &preg, errbuf, sizeof(errbuf)); 
#  以下のように正規表現を変更したところ、同じ結果を返すのにもかかわらず 
#  実行速度が4倍以上もかかるようになってしまいました。原因かわかる方教えていただけないでしょうか? 
# 
# 

'Apacheのログから一部分を抜き出して検索したい'(ApacheLog,X) :-
        get_split_lines(ApacheLog,[' ','"','?'],LL),
        append(_,[L|R],LL),
        選択(L,X).

選択(L,X) :-
        append(_,['GET',X|_],L).
選択(L,X) :-
        append(_,[X|_],L),
        sub_atom(X,0,4,_,http).