使用正则表达式从LDAP路径中提取名称

3

目前我正在使用下面的正则表达式从LDAP路径中提取名称,它可以正常工作,直到在路径中使用逗号。

当前正则表达式:

CN=([^,]*).*

在下面的LDAP路径示例中,我得到了“Deborah \”,我希望它返回“Deborah,James”。我不理解正则表达式,并且已经花费了几个小时尝试使其工作,有人可以帮助我解决吗?
CN=Deborah\, James,OU=Staff,DC=Comp,DC=com
非常感谢。 Jake
3个回答

1
如果您处于受控环境并且可以控制 CN 始终由 OU 找到,那么您可以使用以下方法:
CN=(.*),OU=

如果您无法保证,那么可以使用这个较为复杂的方法,但是如果CN后面跟着任何其他属性或者CN在最后一个位置,它将起作用:

CN=(.*?)(?:,[A-Z]+=|$)

谢谢您的回复,但这两个选项都无法解决我的问题。 - JakeHolt
Deborah,JamesStaff,DC = Comp,DC = com - JakeHolt
抱歉,我不小心在完成之前点击了“添加评论”,正如您在上面看到的那样,它不起作用,也许是我做错了什么。这对您有用吗?谢谢。 - JakeHolt
@jakeHolt:然后将其修改为以,DC=结尾,而不是OU=(还要关闭大小写敏感性,因为它很可能是ou=或dc=)。请注意,句点、逗号和斜杠将以相同的方式转义。 - geoffc
@JakeHolt,是的,对于你在原始问题中提供的测试数据,它对我有效。 - Samuel Neff

0

在编程中,应该使用LDAP API来解析名称,而不是正则表达式。在Java JNDI中,这意味着从上下文中获取一个NameParser。


并非所有的LDAP API都提供此功能。不幸的是,.NET的DirectoryServices API没有提供(尽管它们有一个内部类,但它没有公开)。OP没有说他使用的技术是什么。 - Samuel Neff

0

我尝试了这里列出的其他答案,但它们仍然返回了通用名称以外的值。我不想要一个组,所以这就是我想出来的东西。如果DN或OU中有CN,它将起作用。

(?i:(?<=CN=)).*?(?=,[A-Za-z]{0,2}=|$)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接