Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 从证书PEM字符串开始和结束的trip正则表达式_Regex_Certificate - Fatal编程技术网

Regex 从证书PEM字符串开始和结束的trip正则表达式

Regex 从证书PEM字符串开始和结束的trip正则表达式,regex,certificate,Regex,Certificate,证书PEM文件包含以下开头和结尾: -----BEGIN CERTIFICATE----- [Base64 of certificate] -----END CERTIFICATE 我只需要提取[Base64 of certificate]部分,即去掉“----开始证书-----”和“----结束证书-----”字符串,我想知道这是否可以用正则表达式来完成,如果可以,正则表达式会是什么样子 我试过: -----BEGIN CERTIFICATE----- (.*) -----END CERTI

证书PEM文件包含以下开头和结尾:

-----BEGIN CERTIFICATE----- [Base64 of certificate] -----END CERTIFICATE
我只需要提取
[Base64 of certificate]
部分,即去掉
“----开始证书-----”
“----结束证书-----”
字符串,我想知道这是否可以用正则表达式来完成,如果可以,正则表达式会是什么样子

我试过:

-----BEGIN CERTIFICATE----- (.*) -----END CERTIFICATE-----
但是,它没有给我证书的Base64,而是返回了所有内容

谢谢,
Jim

因为我不知道您使用的语言,我给您提供了一个相对可移植的模式(必须支持向前看和向后看):


(?因为我不知道您使用的语言,所以我给您提供了一个相对可移植的模式(必须支持向前看和向后看):


(?以下是支持您的需求的示例perl代码

my $Str = "-----BEGIN CERTIFICATE-----
MIIBuTCCASKgAwIBAgIQNdNhtuV5GbNHYZsf+LvM0zANBgkqhkiG9w0BAQUFADAb
MRkwFwYDVQQDExBFZGlkZXYgU21va2VUZXN0MB4XDTA4MTExMjE5NTEzNVoXDTM5
MTIzMTIzNTk1OVowGzEZMBcGA1UEAxMQRWRpZGV2IFNtb2tlVGVzdDCBnzANBgkq
hkiG9w0BAQEFAAOBjQAwgYkCgYEAm6zGzqxejwswWTNLcSsa7P8xqODspX9VQBuq
5W1RoTgQ0LNR64+7ywLjH8+wrb/lB6QV7s2SFUiWDeduVesvMJkWtZ5zzQyl3iUa
CBpT4S5AaO3/wkYQSKdI108pXH7Aue0e/ZOwgEEX1N6OaPQn7AmAB4uq1h+ffw+r
RKNHqnsCAwEAATANBgkqhkiG9w0BAQUFAAOBgQCZmj+pgRsN6HpoICawK3XXNAmi
cgfQkailX9akIjD3xSCwEQx4nG6tZjTz30u4NoSffW7pch58SxuZQDqW5NsJcQNq
Ngo/dMoqqpXdi2/0BYEcJ8pjsngrFm+fM2BnyGpXH7aWuKsWjVFGlWlF+yi8I35Q
8wFJt2Z/XGA7WWDjvw==
-----END CERTIFICATE-----";
if($Str =~ /^\W+\w+\s+\w+\W+\s(.*)\s+\W+.*$/s) {
    print "$1" . "\n\n";
} else {
    print "No\n" . "\n\n";
}
输出:
下面是支持您的需求的示例perl代码

my $Str = "-----BEGIN CERTIFICATE-----
MIIBuTCCASKgAwIBAgIQNdNhtuV5GbNHYZsf+LvM0zANBgkqhkiG9w0BAQUFADAb
MRkwFwYDVQQDExBFZGlkZXYgU21va2VUZXN0MB4XDTA4MTExMjE5NTEzNVoXDTM5
MTIzMTIzNTk1OVowGzEZMBcGA1UEAxMQRWRpZGV2IFNtb2tlVGVzdDCBnzANBgkq
hkiG9w0BAQEFAAOBjQAwgYkCgYEAm6zGzqxejwswWTNLcSsa7P8xqODspX9VQBuq
5W1RoTgQ0LNR64+7ywLjH8+wrb/lB6QV7s2SFUiWDeduVesvMJkWtZ5zzQyl3iUa
CBpT4S5AaO3/wkYQSKdI108pXH7Aue0e/ZOwgEEX1N6OaPQn7AmAB4uq1h+ffw+r
RKNHqnsCAwEAATANBgkqhkiG9w0BAQUFAAOBgQCZmj+pgRsN6HpoICawK3XXNAmi
cgfQkailX9akIjD3xSCwEQx4nG6tZjTz30u4NoSffW7pch58SxuZQDqW5NsJcQNq
Ngo/dMoqqpXdi2/0BYEcJ8pjsngrFm+fM2BnyGpXH7aWuKsWjVFGlWlF+yi8I35Q
8wFJt2Z/XGA7WWDjvw==
-----END CERTIFICATE-----";
if($Str =~ /^\W+\w+\s+\w+\W+\s(.*)\s+\W+.*$/s) {
    print "$1" . "\n\n";
} else {
    print "No\n" . "\n\n";
}
输出: 在perl中:

my base64_cert_data;
if ($certbuf=~/(-+BEGIN CERTIFICATE-+)(.*?)(-+END CERTIFICATE-+)/s) {
    base64_cert_data = $2;
}
正则表达式解释:

/(-+BEGIN CERTIFICATE-+)(.*?)(-+END CERTIFICATE-+)/s

1st Capturing group (-+BEGIN CERTIFICATE-+)
    -+ matches the character - literally
        Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
    BEGIN CERTIFICATE matches the characters BEGIN CERTIFICATE literally (case sensitive)
    -+ matches the character - literally
        Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
2nd Capturing group (.*?)
    .*? matches any character
        Quantifier: *? Between zero and unlimited times, as few times as possible, expanding as needed [lazy]
3rd Capturing group (-+END CERTIFICATE-+)
    -+ matches the character - literally
        Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
    END CERTIFICATE matches the characters END CERTIFICATE literally (case sensitive)
    -+ matches the character - literally
        Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
s modifier: single line. Dot matches newline characters
在perl中:

my base64_cert_data;
if ($certbuf=~/(-+BEGIN CERTIFICATE-+)(.*?)(-+END CERTIFICATE-+)/s) {
    base64_cert_data = $2;
}
正则表达式解释:

/(-+BEGIN CERTIFICATE-+)(.*?)(-+END CERTIFICATE-+)/s

1st Capturing group (-+BEGIN CERTIFICATE-+)
    -+ matches the character - literally
        Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
    BEGIN CERTIFICATE matches the characters BEGIN CERTIFICATE literally (case sensitive)
    -+ matches the character - literally
        Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
2nd Capturing group (.*?)
    .*? matches any character
        Quantifier: *? Between zero and unlimited times, as few times as possible, expanding as needed [lazy]
3rd Capturing group (-+END CERTIFICATE-+)
    -+ matches the character - literally
        Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
    END CERTIFICATE matches the characters END CERTIFICATE literally (case sensitive)
    -+ matches the character - literally
        Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
s modifier: single line. Dot matches newline characters

base64字符集是:

[A-Za-z0-9+/\r\n]+={0,2}
-这是对PEM文件(base64证书)通常使用的内容的准确描述。
=
用于填充(在末尾),
\r\n
是新行字符

综合起来,我们得到:

“-+BEGIN\\s+.*证书[^-]*-+(?:\\s |\\r |\\n)+”//头
+“([A-Za-z0-9+/\r\n]+={0,2})”///Base64文本
+“-+END\\s+.*证书[^-]*-+”//页脚

如果您想成为语言不可知论者,您可以期望页眉/页脚是一个或多个
-
字符,后面紧跟着大写字母,然后是一个或多个
-
字符。

base64字符集是:

[A-Za-z0-9+/\r\n]+={0,2}
-这是对PEM文件(base64证书)通常使用的内容的准确描述。
=
用于填充(在末尾),
\r\n
是新行字符

综合起来,我们得到:

“-+BEGIN\\s+.*证书[^-]*-+(?:\\s |\\r |\\n)+”//头
+“([A-Za-z0-9+/\r\n]+={0,2})”///Base64文本
+“-+END\\s+.*证书[^-]*-+”//页脚

如果你想成为语言不可知论者,你可以期望页眉/页脚是一个或多个
-
字符,后跟大写字母,再加上一个或多个
-
字符。

你使用什么语言?鉴于-不会出现在主base64块的任何地方,我在java中的理解是:str=str.replaceAll(“-+.[A-Z]+-+”,”)-这还包括CSR和键等其他内容。您使用哪种语言?鉴于它不会出现在主base64块中的任何位置,我在java中对此的理解是:str=str.replaceAll(“-+.[A-Z]+-+”,”)-这还包括CSR和密钥等其他内容。在查看一些问题时,这是验证base64编码的唯一尝试。我仍然需要修改一点以'-+开始[a-zA-Z]*-+\\n[a-zA-z0-9\/\\n+]+-+结束[a-zA-Z]*-+\\n'。然后我再次检查密钥而不是证书。在某些编程语言中,您可以完全忽略区分大小写以简化一些事情。密钥通常在页眉/页脚中有证书,并且密钥将有密钥。在查看一些问题时,这是验证base64编码的唯一尝试。我仍然需要修改有点“-+开始[a-zA-Z]*-+\\n[a-zA-z0-9\/\\n+]+-+结束[a-zA-Z]*-+\\n”。然后我再次检查密钥而不是证书。在某些编程语言中,可以完全忽略大小写敏感度以简化一些事情。密钥通常在页眉/页脚中有证书,而密钥将有密钥。