我想在我正在研究的正则表达式中对XOR的第二个条件提供一些帮助。
这个正则表达式的目的是获得cn=
之后的字符串,直到括号成为空的空格或直到两个右括号。
在第一种情况下,它将是空格后的文本,我不想在我的匹配数据上,但我不能摆脱这一点,例如:
(&(cn=Another (test)))
(&(cn=Another (test)) (objectClass=group))
在上面这个例子中我想得到另一个(测试)
我尝试了一个负面的预测,但无法使其发挥作用。
到目前为止我得到了什么:
https://rubular.com/r/DVV830IGSGiNSf
编辑:
我需要得到的是与cn=
文本在同一括号内的字符串,除了cn=
本身。我需要高调的东西:
(&(CN =测试))
(&(cn = Testing)(objectClass = group))
(&(CN =碲(ST)坏))
(&(CN = Te(st)ing)(objectClass = group))
(&(cn =另一个(测试)))
(&(cn = Another(test))(objectClass = group))
(&(cn = Access RW \ Srv-corp \ ScriptsDesenv))
(&(cn = Access RW \ Srv-corp \ ScriptsDesenv)(objectClass = group))
(&(CN =王牌()))
(&(cn = Acess())(objectClass = group))
幸运的是,Ruby 2. *支持您的需求所依赖的递归。使用以下正则表达式:
(?i)cn=\K(\(\g<1>\)|[^()]*)+
正则表达式细分:
(?i)
启用不区分大小写的匹配cn=
匹配cn=
\K
重置输出(
开始捕获组#1
\(\g<1>\)
递归匹配,其中显示左括号
|
或
[^()]*
匹配(
和)
以外的任何东西)+
结束CP#1,尽可能重复我建议将字符串拆分为cn
的匹配括号,然后使用(cn|CN)=([0-9a-zA-Z \\()-])+