2

ログ ファイルを 1 行ずつ解析しています。

私は次のように一致させたい:

"GET /manager/ HTTP/1.1" 200
"GET /manager HTTP/1.1" 200
"GET /manager HTTP/1.1" 401
"GET /manager/ HTTP/1.1" 401

現在、これらの各オプションを独自の変数に割り当ててから、次のことを行っています。

if (strpos($line,$a) || strpos($line,$b) || strpos($line,$c) || strpos($line,$d)) 
    {
    }

もっと良い方法があれば?ありがとう

4

3 に答える 3

4

この正規表現は、次の 4 つのバリエーションすべてに一致します。

^"GET /manager/? HTTP/1\.1" (200|401)$

また、区切り文字として別​​の文字を使用しない限り、バックスラッシュでスラッシュをエスケープする必要があります。

于 2013-02-22T10:16:50.980 に答える
0

この正規表現(GET|POST)\s+(.*)\s+(HTTP.*)\s+(\d{3})を試してください["GET", "/manager/", "HTTP/1.1", "401"]

更新されたコード:

$logStr = '"GET /manager/ HTTP/1.1" 200
"GET /manager HTTP/1.1" 200
"GET /manager HTTP/1.1" 401
"GET /manager/ HTTP/1.1" 401
';
echo $logStr;
preg_match('/(GET|POST)\s+(.*)\s+(HTTP.*)\s+(\d{3})/', $logStr, $matches);
print_r($matches);
于 2013-02-22T10:37:23.617 に答える
0

それを試してみてください

$str = '
"GET /manager/ HTTP/1.1" 200
"GET /manager HTTP/1.1" 200
"GET /manager HTTP/1.1" 401
"GET /manager/ HTTP/1.1" 401
';

preg_match_all('#^\s*("GET\s+/manager/?\s+HTTP/1\.1"\s+(?:200|401)+)#im', $str, $match);
print_r($match[1]);
于 2013-02-22T10:35:51.513 に答える