正则表达式只匹配前缀或仅后缀(XOR)

时间:2016-03-05 16:05:17

标签: java regex

我有一个模式,我将其称为Z(实际模式有点长,对问题不重要)。简而言之,我希望能够匹配\*\sZZ\:,但不能同时匹配,也不能同时匹配。

我尝试使用前瞻(类似于下面的内容),但由于前缀和后缀之间的模式,它们无法工作。

(\*\s(?!\:))Z((?<!\*)\:)

有没有办法在不复制模式的情况下完成此操作(例如(\*\sZ|Z\:))?

关于我的模式的快速说明是\*模式中没有Z,仅在前缀中。相反,在Z模式中也没有\:,如果立即进行 Z,则仅在后缀中,但不是在任何其他字符之后(其中&#39; sa .*在后​​缀之后捕获

1 个答案:

答案 0 :(得分:4)

  

有没有办法完成这个而不必复制   图案?

答案是&#34;否&#34;。与andor不同,andconcatenation是正则表达式的基本属性。在正则表达式中,您可以使用or轻松构建|表达式,并分别使用\*\sZ 构建Z\: 表达式。

但无论如何,如果你仍然希望完成你的工作,我建议你这样做。

首先,你已经有了两种模式

xor

\*\sZ(?!\:)|(?<!\*\s)Z\:

所以,正如你所说,这两种模式不可能同时发生。

所以来自UIImageView的属性:

  

A x或B =(A&amp; ~B)|(~A&amp; B)。

最后,我们可以得到

exampleImageView

查看DEMO