このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1362913813/397
#  質問です 
#   
#  ●正規表現の使用環境 
#  PHP5.3.3 
#   
#  ●検索か置換か? 
#  置換 
#   
#  ●説明 
#  ・URLが含まれていたときに、jpg,png,gifならimgタグへ変換。 
#  ・それ以外ならaタグへ変換。 
#  ・URLに日本語が含まれていた場合も、スペースや改行、文字列の終端にくるまでのものも上記のようにリンク化 
#   
#  ●対象データ 
#  [1] こちらへ→http://ime.nu/example.com/index.html 
#  [2] 写真はこれです→https://example.com/写真.jpg 
#   
#  ●希望する結果 
#  [1] こちらへ→<a href="http://ime.nu/example.com/index.html">http://example.com/index.html</a> 
#  [2] 写真はこれです→<img src="https://example.com/写真.jpg" /> 
# 
# 

'・URLが含まれていたときに、jpg,png,gifならimgタグへ変換。 
・それ以外ならaタグへ変換。 '(_文字列,_imgタグ) :-
        'URL部分の切り出し'(_文字列,_前文字列,_URL部分文字列,_後文字列),
        'jpg,png,gifならimgタグへ変換。'(_前文字列,_URL部分文字列,_後文字列,_imgタグ),!.
'・URLが含まれていたときに、jpg,png,gifならimgタグへ変換。 
・それ以外ならaタグへ変換。 '(_文字列,_imgタグ) :-
        'URL部分の切り出し'(_文字列,_前文字列,_URL部分文字列,_後文字列),
        'それ以外ならaタグへ変換'(_前文字列,_URL部分文字列,_後文字列,_imgタグ).

'jpg,png,gifならimgタグへ変換。'(_前文字列,_URL部分文字列,_後文字列,_imgタグ) :-
        'jpg,png,gifなら'(_URL部分文字列),
        'imgタグへ変換。'(_前文字列,_URL部分文字列,_後文字列,_imgタグ).

'jpg,png,gifなら'(_URL部分文字列) :-
        sub_atom(_URL部分文字列,_,4,0,_サフィックス部分文字列),
        member(_サフィックス部分文字列,['.jpg','.png','.gif']).

'imgタグへ変換。'(_前文字列,_URL部分文字列,_後文字列,_imgタグ) :-
        atomic_list_concat([_前文字列,'',_後文字列],_imgタグ).

'それ以外ならaタグへ変換'(_前文字列,_URL部分文字列,_後文字列,_aタグ) :-
        'それ以外なら'(_URL部分文字列),
        'aタグへ変換'(_前文字列,_URL部分文字列,_後文字列,_aタグ).

'それ以外なら'(_URL部分文字列) :-
        sub_atom(_URL部分文字列,_,4,0,_サフィックス部分文字列),
        \+(member(_サフィックス部分文字列,['.jpg','.png','.gif'])).

'aタグへ変換'(_前文字列,_URL部分文字列,_後文字列,_aタグ) :-
        atomic_list_concat([_前文字列,'',_URL部分文字列,'',_後文字列],_aタグ).

'URL部分の切り出し'(_文字列,_前文字列,_URL部分文字列,_後文字列) :-
        sub_atom(_文字列,S,Len,R,A),
        member(A,['http://','file://','ftp://']),
        S_2 is S + Len,
        'URL部分の切り出し'(_文字列,S,S_2,_前文字列,_URL部分文字列,_後文字列).

'URL部分の切り出し'(_文字列,S,S_2,_前文字列,_URL部分文字列,_後文字列) :-
        sub_atom(_文字列,S_2,_,0,_副文字列),
        区切り文字で分割(_副文字列,_URL部分文字列,_後文字列),
        sub_atom(_文字列,0,S,_,_前文字列),!.

区切り文字で分割(_副文字列,_URL部分文字列,_後文字列) :-
        sub_atom(_副文字列,S,1,R,_文字),
        member(_文字,[' ','\t','\n']),
        sub_atom(_副文字列,0,S,R,_URL部分文字列),
        sub_atom(_副文字列,_,R,0,_後文字列),!.
区切り文字で分割(_URL部分文字列,_URL部分文字列,'').