【Python】正規表現のmatchとsearch

正規表現を用いた文字列検索には、re.match() と re.search() があります。  

この二つには matchは前頭検索、searchは全文検索という違いがあります。  

 

そのため、searchのみでよいのではという提案もされています。

先日参加いたしましたPyConJP2014でも、以下の講演で提唱されていました。  

正規表現リテラルは本当に必要なのか?

 

この講演を拝聴した後、その場でre.matchとre.searchの違いについて調べてみました。  

ともに参加していた先輩の助けもあり Python · GitHub を見つけることができました。

ソースを見ると CPython/Lib/re.py , sre_compile.py が関係あることは分かりましたが、文字列オブジェクトの操作らしい事までしか自分にはわかりませんでした。  

(処理の流れがわかる方がいましたら、ご教授いただければ幸いです)

 

先輩曰く、引数にインデックスを持ち、値を0にしたのがmatchだと考えられるが、なぜ2つあるのかはわからない、とのことでした。

 

matchとsearchの2つを用意することで、pythonユーザーがコーディングしやすくなるのではと考えたこともありましたが、メソッド名から振る舞いの差がわかるということもないためそれはなさそうですね。