### match() vs search()
match() 函數只檢查 RE 是否在字符串開始處匹配,而 search() 則是掃描整個字符串。記住這一區別是重要的。記住,match() 只報告一次成功的匹配,它將從 0 處開始;如果匹配不是從 0 開始的,match() 將不會報告它。
```
#!python
>>> print re.match('super', 'superstition').span()
(0, 5)
>>> print re.match('super', 'insuperable')
None
```
另一方面,search() 將掃描整個字符串,并報告它找到的第一個匹配。
```
#!python
>>> print re.search('super', 'superstition').span()
(0, 5)
>>> print re.search('super', 'insuperable').span()
(2, 7)
```
有時你可能傾向于使用 re.match(),只在RE的前面部分添加 .\* 。請盡量不要這么做,最好采用 re.search() 代替之。正則表達式編譯器會對 REs 做一些分析以便可以在查找匹配時提高處理速度。一個那樣的分析機會指出匹配的第一個字符是什么;舉個例子,模式 Crow 必須從 "C" 開始匹配。分析機可以讓引擎快速掃描字符串以找到開始字符,并只在 "C" 被發現后才開始全部匹配。
添加 .\* 會使這個優化失敗,這就要掃描到字符串尾部,然后回溯以找到 RE 剩余部分的匹配。使用 re.search() 代替。