Java正则表达式提取含逗号的证书组件字段方法问询
解决证书DN字符串中转义逗号的正则提取问题
针对带转义逗号的证书DN(区分名)字符串,原正则因为无法识别转义逗号,会错误截断属性值。可以用以下正则解决:
([A-Z]+)=(?:\\.|[^,])*(?=,|$)
正则拆解
([A-Z]+):捕获CN、OU、O、C这类属性名(大写字母组成的标识)=:匹配属性名和值的分隔符(?:\\.|[^,])*:核心部分,匹配属性值:\\.:匹配转义字符(比如\,这种转义逗号)[^,]:匹配非逗号的普通字符- 两者组合就能完整包含带转义逗号的属性值,不会把转义后的逗号当成属性分隔符
(?=,|$):正向预查,确保当前匹配的属性值后面跟着的是未转义的逗号(属性分隔符)或者字符串结尾,用来精准定位属性值的结束位置
实际效果
用这个正则匹配目标字符串:
CN=Entrust Certification Authority - L1K,OU=(c) 2012 Entrust\, Inc. - for authorized use only,OU=See www.entrust.net/legal-terms,O=Entrust\, Inc.,C=US
会得到所有完整的键值对:
- CN=Entrust Certification Authority - L1K
- OU=(c) 2012 Entrust, Inc. - for authorized use only
- OU=See www.entrust.net/legal-terms
- O=Entrust, Inc.
- C=US
如果只需要提取某个特定属性(比如OU),可以把正则改成OU=(?:\\.|[^,])*(?=,|$),就能精准提取所有OU的完整属性值。
内容的提问来源于stack exchange,提问作者Tranquilized
相关产品推荐
相关产品推荐

