正则表达式解析证书主题键值对:如何捕获最后一组键值对
解决正则无法匹配最后一组证书主题键值对的问题
这个坑我之前也踩过!你写的正则里,正向预查(?=\w+\s*=)要求当前匹配的value后面必须跟着另一个键值对的开头,但最后一组的后面根本没有下一个key=,自然就被漏掉了。
只需要给预查条件加一个“或者到字符串结尾”的分支就行,修改后的正则是:
(?<key>\w+)\s*=\s*(?<value>.*?)(?=\w+\s*=|$)
关键修改说明
把原来的(?=\w+\s*=)替换成(?=\w+\s*=|$),其中|$表示“匹配到字符串末尾”。这样正则就会明白:要么后面有下一个键值对,要么已经到内容结尾了,这两种情况都可以结束当前value的匹配。
实际测试效果
用你提供的目标主题内容:
CN = Some CN to catch SERIALNUMBER = aaaa bbbb, O = SIGNATUR,C=PL
修改后的正则会正确捕获所有4组键值对:
- CN: Some CN to catch
- SERIALNUMBER: aaaa bbbb,
- O: SIGNATUR,
- C: PL
哪怕你的value里包含空格、逗号这类特殊字符,非贪婪匹配.*?也能准确停在合适的位置,不会过度匹配。
内容的提问来源于stack exchange,提问作者Sławomir Rosiek
相关产品推荐
相关产品推荐

