正则表达式中互斥或(XOR)的第二个条件

时间:2019-03-11 20:54:08

标签: regex

在我正在处理的此正则表达式中,我希望对XOR的第二个条件有所帮助。

此正则表达式旨在获取cn=之后的字符串,直到括号后面有一个空格或两个闭合括号为止。

在第一种情况下,它将是空白,我不想在比赛数据上显示文字,但是我无法摆脱它,例如:

(&(cn=Another (test))) (&(cn=Another (test)) (objectClass=group))

在上面的示例中,我只想获得另一个(测试)

我尝试了否定的前瞻性,但是无法正常工作。

到目前为止,我得到的是:

https://rubular.com/r/DVV830IGSGiNSf

编辑:

我需要获得的是与cn=文本相同括号内的字符串,除了cn=本身。我需要突出显示的内容:

(&(cn = 测试))

(&(cn = 测试)(objectClass = group))

(&(CN = Te(st)ing ))

(&(CN = Te(st)ing )(objectClass = group))

(&(cn = 另一个(测试)))

(&(cn = 另一个(测试))(objectClass = group))

(&(cn = 访问RW \ Srv-corp \ ScriptsDesenv ))

(&(cn = 访问RW \ Srv-corp \ ScriptsDesenv )(objectClass = group))

(&(cn = 访问权限()))

(&(cn = Acess())(objectClass = group))

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

请参见live demo here

正则表达式细目:

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