0

AD 中 distinctname 的值通常采用以下格式:

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+" 没有帮助。

我看到了问题,但不知所措。

谢谢你的帮助。

4

1 回答 1

2

Distinguished Names 的语法在 RFC 4514(它取代了 RFC 2253)中进行了规定,并且它并不能用正则表达式完全解析。OpenLDAP 包含一些库函数,它们将解析和验证它的价值。但是,如果您需要一个快速而简单的正则表达式,您可以使用以下 Posix ERE:(([^\,]|\\.)*在 Perl、Python 或具有类似正则表达式扩展的其他语言中,使用(?:[^\,]|\\.)*以避免不必要的捕获。)

这意味着“匹配除,and之外的任何字符序列\,可能还包括一对\和任何单个字符”。这是实际 LDAP 规范的超集,它不允许\后跟除十六进制数字或少数特殊字符之一以外的任何内容,因此它将接受许多无效的 DN 组件,但它应该接受所有有效的而且,我相信,永远不会吞下分隔 DN 组件的逗号。

这是一个使用 grep 在 bash 中的简单测试:

$ 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
于 2012-09-14T00:46:20.697 回答