正则表达式:匹配OU=后至下一个逗号前的所有内容
解决LDAP OU字段提取的正则问题
你的问题出在正则的贪婪匹配上——.*会尽可能匹配最长的字符串,所以从第一个OU=开始,它会一直匹配到最后一个逗号前的所有内容,自然就把后面的OU=whatever2也包含进去了。
给你两个靠谱的解决方案:
方案1:使用非逗号字符匹配(推荐,简洁直观)
用[^,]+代替.*,这个表达式会匹配任意不是逗号的字符,直到遇到第一个逗号为止,完美避免贪婪匹配的问题:
(?<=OU=)[^,]+
匹配你的示例字符串时,会分别返回whatever1和whatever2两个独立的结果。
方案2:使用捕获组(兼容性更好)
如果你的正则引擎不支持正向零宽断言(比如部分老工具),可以用捕获组来提取内容:
OU=([^,]+)
运行这个正则后,每个匹配结果的第一个捕获组就是你要的OU值,同样能得到whatever1和whatever2。
测试一下就知道,这两个方案都能精准提取每个OU段的内容,不会出现过度匹配的问题~
内容的提问来源于stack exchange,提问作者Benjamin Ghenne
相关产品推荐
相关产品推荐

