正则表达式如何精准匹配两指定字符串间的紧邻目标内容
正则匹配LDAP条目CN值解决方案
问题场景
现有竖线分隔的LDAP DN拼接字符串,格式示例如下:
cn=doc_medical,ou=tged,ou=groupes,o=choregie,c=fr|cn=test,ou=test,ou=test,o=choregie,c=fr|cn=doc_confidentiel,ou=tged,ou=groupes,o=choregie,c=fr|cn=test,ou=test,ou=test,o=choregie,c=fr
需要提取所有后缀为,ou=tged,ou=groupes,o=choregie,c=fr的DN对应的CN值,以上示例预期输出为doc_medical和doc_confidentiel。
原有正则(?=cn=)(.*?)(?<=,ou=tged,ou=groupes,o=choregie,c=fr)存在跨条目匹配问题,第二个匹配结果会包含前一个无关DN的全部内容,不符合预期。
可用正则
直接使用以下正则执行全局匹配,取第一个捕获组内容即可:
cn=([^|,]+),ou=tged,ou=groupes,o=choregie,c=fr
逻辑说明
- 匹配规则限定
cn=和目标后缀之间的内容不能包含竖线|(DN条目分隔符)和逗号,(DN键值对分隔符),从根本上避免跨条目匹配 - 该规则会自动定位到目标后缀之前最近的一个
cn=,不需要预知两个边界之间的字符长度 - 捕获组
([^|,]+)返回的内容就是需要的CN值,无多余字符
匹配结果验证
针对示例字符串执行全局匹配,两个捕获组的返回值分别为:
- 第一次匹配:
doc_medical - 第二次匹配:
doc_confidentiel
完全符合预期。
内容的提问来源于stack exchange,提问作者Philippe B.
相关产品推荐
相关产品推荐

