此正则表达式等效于Java Regex:
^(?:(?!-{3,}(?:BEGIN|END) CERTIFICATE)[\s\S])*(-{3,}BEGIN CERTIFICATE(?:(?!-{3,}END CERTIFICATE)[\s\S])*?-{3,}END CERTIFICATE-{3,})(?![\s\S]*?-{3,}BEGIN CERTIFICATE[\s\S]+?-{3,}END CERTIFICATE[\s\S]*?$)
此正则表达式的目标是验证字符串是否为有效的SSL证书格式
示例输入
-----BEGIN CERTIFICATE-----
section 1
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
section 2
-----END CERTIFICATE-----
这里的另一个问题是,它仍然不匹配第一部分 section 1 ,而仅匹配 section 2
答案 0 :(得分:2)
您可以使用以下更简单的正则表达式:
(?m)^-{3,}BEGIN CERTIFICATE-{3,}$(?s).*?^-{3,}END CERTIFICATE-{3,}$
RegEx详细信息:
(?m)
:为此正则表达式设置MULTILINE
修饰符^-{3,}BEGIN CERTIFICATE-{3,}$
:将一行与BEGIN CERTIFICATE
(?s).*?
:匹配可能包含换行符的证书数据^-{3,}END CERTIFICATE-{3,}$
:将一行与END CERTIFICATE
对于Java,请使用以下正则表达式字符串:
final String regex =
"(?m)^-{3,}BEGIN CERTIFICATE-{3,}$(?s).*?^-{3,}END CERTIFICATE-{3,}$";