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