- 907 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 21:27:21 ]
- >>904
6.2. match() vs search() match() 関数は、正規表現が先頭でマッチするかを調べるだけで、 search() は文字列の先へ進みながら、マッチする部分を探します。 この違いを覚えておくことは重要です。 match() は位置 0 でマッチした場合のみ報告してくれます。 もしマッチが位置 0 以外ならmatch() は報告しません。 >>> print re.match('super', 'superstition').span() (0, 5) >>> print re.match('super', 'insuperable') None 反対に、search() は文字列を先へと探していき、最初に見付けたマッチを返します。 >>> print re.search('super', 'superstition').span() (0, 5) >>> print re.search('super', 'insuperable').span() (2, 7) ときどき、あなたは re.match() のみを使って、 正規表現の前に .* を付けておくという誘惑にかられるかも知れません。 この誘惑に打ち勝って、re.search() を使いましょう。 正規表現のコンパイラは、マッチ部分の探索を高速に行うために、 正規表現をそれなりに解析します。 そのような解析のひとつが、最初のマッチ文字が何であるか見付けることです。 たとえば Crow で始まるパターンは "C" で始まる文字列とマッチしなければいけません。 この解析により、マッチングエンジンは、文字列の中から最初の文字を素早く探索し、 見付かった場合だけ全体のマッチを試みるのです。 .* を付け加えると、この最適化ができないため、文字列の最後まで探索してから、 残りの正規表現のマッチ部分を探しに逆戻りすることが必要になるのです。
|

|