0

我正在制作一段可重用的代码。api_key可以指定用于捕获和组的正则表达式signature,如以下Authorization标头:

AWS 44CF9590006BF252F707:jZNOcbfWmD/A/f3hSvVzXZjM2HU=

正则表达式将是:

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

当然 AWS 和密钥/签名对的顺序可能会改变(这就是我使用正则表达式的原因)。但是应该总是有一个api_key捕获组和一个signature捕获组。

如何使用另一个正则表达式检查这些组是否存在?

编辑:根据答案,我似乎根本不擅长解释问题。

(此代码的)用户将提供正则表达式(如上面的那个)。我只需要检查给定的正则表达式是否(至少)两个捕获组(api_keysignature)。然后,我将使用提供的正则表达式来测试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 回答