使用接受空间

时间:2018-03-20 07:39:57

标签: regex

我试图解析证书主题键值对,并尝试使用正则表达式进行解析。

我已经编写了以下正则表达式来捕获键值对但是我遇到了最后一对不匹配的问题:

(?<key>\w+)\s*=\s*(?<value>.*?)(?=\w+\s*=)

你知道如何捕捉最后一对这样的主题:

CN = Some CN to catch SERIALNUMBER = aaaa bbbb, O = SIGNATUR,C=PL

我希望获得这些键的值:CN,SERIALNUMBER,O和C

1 个答案:

答案 0 :(得分:2)

你的超前需要1个字符,0 +空白字符,然后匹配值后需要=

您需要添加字符串替换的结尾

(?<key>\w+)\s*=\s*(?<value>.*?)(?=\w+\s*=|$)
                                         ^^

请参阅regex demo

您也可以使用

(?<key>\w+)\s*=\s*(?<value>\W*(?:\w(?!\w*\s*=)\W*)*)

效率更高一点。见this demo。在这里,\W*(?:\w(?!\w*\s*=)\W*)*匹配任何0+非单词字符,后跟0 +重复单词字符,后面跟着0+字,然后是空白字符,然后是=,后面跟着0+非单词字符。基本上,它是模式的unroll-the-loop&#39; ed .*?(?=\w+\s*=|$)部分。