正则表达式中的排他性或(XOR)的第二个条件

问题描述 投票:1回答:2

我想在我正在研究的正则表达式中对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))

regex
2个回答
0
投票

幸运的是,Ruby 2. *支持您的需求所依赖的递归。使用以下正则表达式:

(?i)cn=\K(\(\g<1>\)|[^()]*)+

live demo here

正则表达式细分:

  • (?i)启用不区分大小写的匹配
  • cn=匹配cn=
  • \K重置输出
  • (开始捕获组#1 \(\g<1>\)递归匹配,其中显示左括号 |[^()]*匹配()以外的任何东西
  • )+结束CP#1,尽可能重复

0
投票

我建议将字符串拆分为cn的匹配括号,然后使用(cn|CN)=([0-9a-zA-Z \\()-])+

© www.soinside.com 2019 - 2024. All rights reserved.