我正在制作一段可重用的代码。可以指定用于捕获api_key
和signature
组的正则表达式,如以下Authorization
标头所示:
AWS 44CF9590006BF252F707:jZNOcbfWmD/A/f3hSvVzXZjM2HU=
正则表达式为:
^AWS (?<api_key>.+):(?<signature>.+)$
当然,AWS 和密钥/签名对的顺序可能会改变(这就是我使用正则表达式的原因)。但是应该始终有一个api_key
捕获组和一个signature
捕获组。
如何使用另一个正则表达式检查这些组是否存在?
编辑:根据答案,我似乎根本不擅长解释这个问题。
用户(此代码的)将提供正则表达式(如上面的那个)。我只需要检查给定的正则表达式是否(至少)是两个捕获问题(api_key
和signature
)。然后,我将使用提供的正则表达式来测试Authorization
标头。
但是你怎么知道你的新正则表达式正确测试了你的正则表达式呢?您可能需要 20-30 个级别的正则表达式:)。你试试一些简单的东西怎么样,比如:
if (strpos($yourRegEx, "(?<api_key>") !== false && strpos($yourRegEx, "(?<signature>") !== false) {
我想这是更万无一失的:
preg_match("'('?<api_key>.+?')", $yourRegEx) && preg_match("'('?<signature>.+?')", $yourRegEx)
为什么不像这样检查PHP:
preg_match('^AWS (?<api_key>.+):(?<signature>.+)$', $value, $matches);
assert(count($matches) === 3); // 0, 1 and 2.