正则表达式检查第一个倒数第二个和内容(加密)

时间:2019-01-28 16:35:58

标签: regex

需要捕获从网络外部发送的私钥。私钥的通用格式如下。

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-----

1 个答案:

答案 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-----)$

Here is a Demo

希望这可以解决您的问题,如果您有任何疑问,请告诉我。