需要捕获从网络外部发送的私钥。私钥的通用格式如下。
Starts and ends with 5 dashes.
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
这是我们开发的正则表达式,可以正常工作。
-----BEGIN\sPRIVATE\sKEY-----|-----END\sPRIVATE\sKEY-----
现在,还需要检测和排除某些示例。
Only detect
-----BEGIN PRIVATE KEY-----
"Any one word other than ENCRYPTED"
-----END PRIVATE KEY-----
我要为上述要求创建一个正则表达式,它必须检查文件-----BEGIN PRIVATE KEY-----
的开头和文件-----END PRIVATE KEY-----
的结尾以及内容是否包含encrypted
字< / p>
示例:
/^(-----BEGIN\sRSA\sPRIVATE\sKEY-----).*((?!ENCRYPTED).)*.(-----END\sRSA\sPRIVATE\sKEY-----)$
^(?=^-----BEGIN\sRSA\sPRIVATE\sKEY-----)(?=.*-----END\sRSA\sPRIVATE\sKEY-----$)(?=^(?:!ENCRYPTED).)*$.*$
上面的示例不起作用,但是我需要创建一个这样的示例...请帮助。
示例键供参考
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,C7F9E43D16E5CF55
C7F9E43D16E5CF55
y4Qk6+2MQuxjZbglAwNEEpNF9hMsr3YNltnP+T3x5oMlw2JaKGYePadDWEAYwXd4
Fk3zYR35Tsz1isLZQzvZd6O5THlx5eyflZBbYGE5fS40VucgiX37tM5D2OsjH3WG
HZBx5Mh4PkGSyoOl7Q5o1SHkeNl4Xkipo9AWRzPzLg4w9HTlqKRltxEKaDbnLaUH
3yGX1rVKkppKUi88vwg6MJ7ATwy8VNhialMmBO4pQVLLBZhH3KU22r4hpCKKq0GR
nZVWA3bJm7hMXALMS8oj+Ljup+ysG3qrvrNSS3H3t2OTrmNsG749M+LDFy7qjZTw
-----END RSA PRIVATE KEY-----
答案 0 :(得分:0)
您的正则表达式^(-----BEGIN\sRSA\sPRIVATE\sKEY-----).*((?!ENCRYPTED).)*.(-----END\sRSA\sPRIVATE\sKEY-----)$
没什么问题。
DOTALL
模式,因为使用(?s)
或通过启用语言标记可以将数据分布在多行中。.*
之前使用((?!ENCRYPTED).)
,因为它消耗了包括ENCRYPTED
文本在内的任何字符,而正则表达式的其余部分通过匹配其余部分使其成功匹配正则表达式的文本。因此,只需删除正则表达式中的.*
。.
之后的((?!ENCRYPTED).)*
,所以也要删除它?:
之后立即附加(
使其成为非捕获组整个正则表达式变为
(?s)^(?:-----BEGIN\sRSA\sPRIVATE\sKEY-----)((?!ENCRYPTED).)*(?:-----END\sRSA\sPRIVATE\sKEY-----)$
希望这可以解决您的问题,如果您有任何疑问,请告诉我。