このディレクトリの索引
#  出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1387257592/14
#  ●Regular Expressionの使用環境  
#  Perl 
#   
#  ●検索か置換か?  
#  検索 
#   
#  ●説明  
#  ミドルネームを含む名前も、ミドルネームを含まない名前も分解して抽出したい 
#  また、名前の区切りはスペースやドットなど色々なものに対応したい 
#   
#  ●対象データ  
#  Edward Snowden 
#  Edward.Joseph.Snowden 
#  エドワード・スノーデン 
#  エドワード=ジョセフ=スノーデン 
#   
#  ●希望する結果 
#  (値を入れているわけではなく、$1〜$3に入っていて欲しいものです) 
#  $1 = "Edward"   $2 = ""   $3 = "Snowden" 
#  $1 = "Edward"   $2 = "Joseph"   $3 = "Snowden" 
#  $1 = "エドワード"   $2 = ""   $3 = "スノーデン" 
#  $1 = "エドワード"   $2 = "ジョセフ"   $3 = "スノーデン" 
# 
# 


'ミドルネームを含む名前も、ミドルネームを含まない名前も分解して抽出したい
また、名前の区切りはスペースやドットなど色々なものに対応したい'(_名前,_ファーストネーム,_ミドルネーム,_ラストネーム) :-
split(_名前,[' ','.','=','・','='],L),
名前の分解(L,_ファーストネーム,_ミドルネーム,_ラストネーム),!.

名前の分解([_ファーストネーム,_ラストネーム],_ファーストネーム,'',_ラストネーム) :- !.
名前の分解([_ファーストネーム,_ミドルネーム,_ラストネーム],_ファーストネーム,_ミドルネーム,_ラストネーム).


split(_文字列,_区切り文字列ならび,_区切られた文字列ならび) :-
区切り文字で区切って行く(_文字列,_区切り文字列ならび,_区切られた文字列ならび).
split(_文字列,_,[_文字列]).

区切り文字で区切って行く(_文字列,_区切り文字列ならび,[_前文字列|R]) :-
区切り文字で(_区切り文字列ならび,_区切り文字列),
区切って行く(_文字列,_区切り文字ならび,_前文字列,_区切り文字列,_後文字列,R).

区切り文字で(_区切り文字列ならび,_区切り文字列) :-
member(_区切り文字列,_区切り文字列ならび).

区切って行く(_文字列,_区切り文字ならび,_前文字列,_区切り文字列,_後文字列,R) :-
sub_atom(_文字列,_前文字列,_区切り文字列,_後文字列),
split(_後文字列,_区切り文字列ならび,R).

sub_atom(_文字列,_前文字列,_適合文字列,_後文字列) :-
sub_atom(_文字列,S,_,R,_適合文字列),
sub_atom(_文字列,0,S,_,_前文字列),
sub_atom(_文字列,_,R,0,_後文字列).