如何用REGEX解析这种类型的字符串?

时间:2017-10-08 19:55:45

标签: java regex client-certificates

示例1:Subject: CN=eakteam.com

示例2:Subject: C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3

示例3:Subject: C=US, ST=CA, L=San Jose, O=Ubiquiti Networks Inc., OU=Technical Support, CN=UBNT-80:2A:A8:EE:B0:A3/emailAddress=support@ubnt.com

问题是如何创建一个正则表达式来检查所有可能性字符串并仅获取CN=(the data that I want)

原始字符串是X509证书,并希望解析其中的所有详细信息。

Data:
Version: 3 (0x2)
    Serial Number : -283916479 (-0x10ec38bf)
    Signature Algorithm : sha256WithRSAEncryption
    Issuer : C = US, ST = CA, L = San Jose, O = Ubiquiti Networks Inc., OU = Technical Support, CN = UBNT - 80 : 2A : A8 : EE : B0 : A3 / emailAddress = support@ubnt.com
    Validity
    Not Before : Mar 29 15 : 17 : 00 2017 GMT
    Not After : Mar 29 15 : 17 : 00 2022 GMT
    Subject : C = US, ST = CA, L = San Jose, O = Ubiquiti Networks Inc., OU = Technical Support, CN = UBNT - 80 : 2A : A8 : EE : B0 : A3 / emailAddress = support@ubnt.com
    Subject Public Key Info :
         Public Key Algorithm : rsaEncryption
             Public - Key : (2048 bit)
             Modulus :
             00 : 8d : 2e : 15 : f1 : 57 : d9 : 9c : aa : d2 : d2 : 66 : 69 : 88 : a4 :
             12 : 38 : b2 : 9c : 2e : 35 : 2b : 8e : 12 : 98 : 55 : 8f : b2 : 21 : ef :
             c1 : dc : 40 : e0 : f1 : da : 42 : b0 : 3e : cd : 21 : 9b : f6 : a5 : 48 :
             5c : 4c : 27 : 2e : 1f : 3b : 3b : 98 : 06 : 73 : 9a : c3 : 82 : e6 : a6 :
             cd : 61 : c9 : ae : 7d : 40 : b7 : 6c : 29 : 0a : e9 : 94 : ee : 2d : f0 :
             f6 : 17 : 1c : e0 : db : f2 : a3 : 21 : 60 : d3 : 16 : b6 : 53 : 3c : 8f :
             6a : cb : 05 : 6c : ed : f6 : 24 : f2 : dc : 32 : c4 : bb : 2b : 46 : d9 :
             3a : d6 : d2 : e1 : 2a : 66 : 85 : b5 : e1 : 8d : 3b : aa : 64 : b5 : 2e :
             4e : f9 : bc : 34 : d7 : 4b : c5 : cb : a8 : 73 : 3e : d6 : 7d : f9 : dd :
             9d : 44 : eb : c8 : c8 : ef : b4 : 79 : 13 : 71 : 2d : 37 : a1 : e9 : cd :
             f5 : 41 : b8 : 3e : 0d : 53 : 3a : 20 : 60 : bb : 8d : c6 : f5 : 43 : eb :
             a1 : b7 : ea : 7f : 74 : c4 : 25 : 09 : cc : 90 : ae : a4 : 3f : 44 : 3d :
             36 : 8b : 48 : 80 : 90 : ec : 77 : 8c : 3d : 52 : da : 09 : cf : b8 : f6 :
             7e : 13 : 7b : 1d : 6b : 90 : 64 : 36 : 37 : c9 : 20 : 99 : e4 : 83 : 56 :
             90 : 6c : de : 8c : 91 : ef : fb : 5f : 49 : c6 : ca : b3 : bf : d0 : ed :
             10 : 60 : d1 : 35 : dd : dc : 0c : 84 : 53 : 74 : 6e : b0 : 8e : 9f : 31 :
             40 : 77 : 07 : 84 : 03 : f8 : 5a : 14 : 0c : d5 : 12 : 53 : 7e : 6a : e6 :
             25 : 9b
             Exponent : 65537 (0x10001)
             Signature Algorithm : sha256WithRSAEncryption
             6d : 24 : 4e : 5d : a4 : dc : 33 : cc : bf : 22 : d9 : 68 : 91 : 6b : 66 : e7 : 62 : 09 :
             35 : a6 : e3 : 38 : 5f : 87 : a9 : a8 : 66 : f4 : a8 : 99 : 5a : 40 : 01 : 75 : bf : eb :
             10 : 11 : d7 : b0 : c9 : 76 : 2b : 23 : ad : 5b : fd : 55 : 4e : f0 : fc : 02 : fe : 9e :
             47 : 78 : 1b : a2 : 3c : f0 : 34 : 9a : 0b : 25 : 44 : 7f : b4 : 0a : 79 : e8 : 54 : 28 :
             0a : 9a : 51 : e3 : e7 : a9 : 84 : 4e : 76 : 51 : b6 : 2b : 4e : b9 : f8 : 1f : 41 : 8d :
             5d : ed : 02 : 54 : 6d : 2e : b8 : cd : c4 : 4e : 85 : a8 : a8 : 86 : 33 : ba : 12 : 6d :
             2e : 65 : ef : e3 : 3d : 4a : e8 : 89 : 9d : 54 : d7 : 92 : 15 : b8 : 68 : 35 : 32 : 57 :
             9b : 0f : 12 : 17 : 0a : 64 : bf : c7 : b3 : a5 : c6 : 3c : bb : 58 : 22 : 85 : 16 : e5 :
             84 : c9 : 33 : e8 : 49 : 3f : e6 : c2 : d6 : 05 : 0c : fe : ac : e6 : 82 : cc : ec : 4a :
             aa : b4 : 57 : 48 : 71 : 98 : dd : 8a : 59 : f3 : 6a : 98 : d6 : e5 : 2d : a7 : b7 : 67 :
             06 : 87 : 9b : 04 : 02 : c6 : 13 : b9 : 69 : c5 : cc : 2c : 84 : 68 : 65 : da : b6 : f3 :
             c2 : 77 : 48 : 6b : 36 : 53 : ae : f6 : 14 : 47 : 0f : 2d : 28 : 6c : bb : 2f : 71 : c2 :
             fd : 02 : 4a : bc : 82 : cc : 3e : 16 : 9c : 0b : 7a : ef : 75 : b2 : 7f : c0 : 37 : 96 :
             b9 : 5c : b0 : 75 : f1 : d7 : 71 : c1 : ee : 52 : 5e : 32 : 46 : 83 : 40 : f5 : b2 : b1 :
             6f : bb : 4a : 35

2 个答案:

答案 0 :(得分:1)

您可以使用:

(?<key>\w+) = (?<value>[^,\n\r]+)

a demo on regex101.com(缩短版) 您也可以只使用编号组,如下所示:

(\w+) = ([^,\n\r]+)

此处,您需要分别使用群组$1$2

答案 1 :(得分:0)

目前尚不清楚您是否只需要CN密钥或所有密钥

仅限CN使用

^Subject :.* CN = ([^,\n\r]+)

并且在模式匹配matcher.group(1)

之后,您将获得组1的值

对于所有按键使用

^Subject :( (\w+) = ([^,]+),)*( (\w+) = ([^,\n\r]+),)

您将在组中得到结果,具体取决于有多少。

这些表达式适用于单行。