0

再利用可能なコードを作成しています。次のヘッダーのように、api_keyおよびsignatureグループをキャプチャするための正規表現を指定できます。Authorization

AWS 44CF9590006BF252F707:jZNOcbfWmD/A/f3hSvVzXZjM2HU=

正規表現は次のようになります。

^AWS (?<api_key>.+):(?<signature>.+)$

もちろん、AWS とキー/署名ペアの順序は変更される可能性があります (そのため、正規表現を使用しています)。ただし、常にapi_keyキャプチャ グループとキャプチャ グループが存在する必要がありますsignature

別の正規表現を使用して、これらのグループが存在するかどうかを確認するにはどうすればよいですか?

編集:答えに基づいて、私は問題を説明するのがまったく得意ではなかったようです。

(このコードの) ユーザーは、(上記のような) 正規表現を提供します。指定された正規表現が (少なくとも) 2 つのキャプチャ グループ (api_keyおよびsignature) であることを確認するだけで済みます。次に、提供された正規表現を使用してAuthorizationヘッダーをテストします。

4

2 に答える 2

1

しかし、新しい正規表現が正規表現を適切にテストしていることをどうやって知るのでしょうか? 20 ~ 30 レベルの正規表現が必要になる場合があります :)。次のような簡単なことを試してみませんか。

if (strpos($yourRegEx, "(?<api_key>") !== false && strpos($yourRegEx, "(?<signature>") !== false) {

これは私が推測するよりばかげた証拠です:

preg_match("\(\?<api_key>.+?\)", $yourRegEx) && preg_match("\(\?<signature>.+?\)", $yourRegEx)
于 2013-01-28T21:04:02.700 に答える
0

次のように PHP をチェックインしてみませんか。

preg_match('^AWS (?<api_key>.+):(?<signature>.+)$', $value, $matches);

assert(count($matches) === 3); // 0, 1 and 2.
于 2013-01-28T21:06:25.867 に答える