AD中distinguishedname的值通常采用以下格式:
CN=lastName\,firstName,OU=Users - XYZ,OU=Users-Test Place,OU=UsersAll,DC=Dom1,DC=Dom2
我想使用正则表达式解析它并获取以下值
CN=lastName\, firstName
OU=Users - XYZ
OU=Users-Test Place
OU=UsersAll
DC=Dom1
DC=Dom2
模式“\ w + = \ w +”没有帮助。
我看到了问题,但我找不到解决方案。
感谢您的帮助。
答案 0 :(得分:2)
可分辨名称的语法在RFC 4514(替换RFC 2253)中列出,并且它与正则表达式不是完全可解析的。 OpenLDAP包含一些库函数,它们将解析和验证它的价值。但是,如果你需要一个快速和脏的正则表达式,你可以使用以下Posix ERE:([^\,]|\\.)*
(在Perl,Python或具有类似正则表达式扩展名的其他语言中,使用(?:[^\,]|\\.)*
来避免不必要的捕获。)
这意味着“匹配,
和\
以外的任何字符序列,可能还包括\
和任何单个字符对”。这是实际LDAP规范的超集,它不允许\
后跟十六进制数字或少数特殊字符之一,因此它将接受许多无效的DN组件,但它应该接受所有有效的,并且我相信,永远不会吞下用于分隔DN组件的逗号。
这是一个简单的测试,在bash中,使用grep:
$ echo 'CN=lastName\, firstName,OU=Users - XYZ,OU=Users-Test Place,OU=UsersAll,DC=Dom1,DC=Dom2' |
> grep -oE '([^\,]|\\.)*'
CN=lastName\, firstName
OU=Users - XYZ
OU=Users-Test Place
OU=UsersAll
DC=Dom1
DC=Dom2