Java正则表达式以匹配有效的证书格式

时间:2019-06-13 15:22:20

标签: java regex

此正则表达式等效于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

1 个答案:

答案 0 :(得分:2)

您可以使用以下更简单的正则表达式:

(?m)^-{3,}BEGIN CERTIFICATE-{3,}$(?s).*?^-{3,}END CERTIFICATE-{3,}$

RegEx Demo

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,}$";