2017-12-13 7 views
1

注::私は正規表現がこの場合にどのように動作するかについてのクエリを持っています。 これは練習に関連していますが、宿題の助けにはなりません!私が言及していない解決策ファイルを得たからです。正規表現フィルタクエリ| Google LogPuzzleExercise

私はlog readingのこのエクササイズに取り組んでいます。基本的にApacheログを読み込んで、ログインした画像ファイルをダウンロードします。

行1:

10.254.254.28 - - [06/Aug/2007:00:12:20 -0700] "GET /keyser/22300/ HTTP/1.0" 302 528 "-" "Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4" 

ライン2:

10.254.254.58 - - [06/Aug/2007:00:10:05 -0700] "GET /edu/languages/google-python-class/images/puzzle/a-baaa.jpg HTTP/1.0" 200 2309 "-" "googlebot-mscrawl-moma (enterprise; bar-XYZ; [email protected],[email protected],[email protected],[email protected])" 

だから、最初私はちょうどすべての


は私に、文字列の部分

を取得GETを識別するシンプルに正規表現を書きました
pattern = r"GET\s(.+)\b\s" 
match_list = re.findall(pattern, log) 
if match_list: 
    print(match_list[0]) 

これは

/keyser/22300/ HTTP/1.0" 302 528 "-" "Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.4) Gecko/20070515 

私はpattern = r"GET\s(.+)\b\sHTTPにパターンを微調整すると、それは今LINE1で何とか無視し、私はどのように知らないさ

/edu/languages/google-python-class/images/puzzle/a-baaa.jpg 

を出力を出力します。誰も私が何を正規表現エラーが私を説明することができますか?

+0

は、それはあなたがのためにバックスラッシュをエスケープ場合は、期待通りに動作します'\ b'それは' GET \ s(。+)\\ b \ sHTTP'ですか? –

+0

それを試してみましたが、文字列を生のままにしていましたので、必要ではないと感じました。 –

+0

Qで述べたように、HTTPで2番目の行が表示されますが、なぜ最初の行は検索されませんか? –

答えて

2

\bエスケープ文字は、単語境界に一致します。つまり、別の単語文字の前に/接尾辞が付いていない単語文字の前後に一致します。最初のログ行のURIセグメントが単語文字は、それがその後、spaceをパタパタword-breakと一致していないと見なされていない/、で終わるので、その後HTTP