我有一个模式,我将其称为Z
(实际模式有点长,对问题不重要)。简而言之,我希望能够匹配\*\sZ
或Z\:
,但不能同时匹配,也不能同时匹配。
我尝试使用前瞻(类似于下面的内容),但由于前缀和后缀之间的模式,它们无法工作。
(\*\s(?!\:))Z((?<!\*)\:)
有没有办法在不复制模式的情况下完成此操作(例如(\*\sZ|Z\:)
)?
关于我的模式的快速说明是\*
模式中没有Z
,仅在前缀中。相反,在Z模式中也没有\:
,如果立即进行 Z,则仅在后缀中,但不是在任何其他字符之后(其中&#39; sa .*
在后缀之后捕获
答案 0 :(得分:4)
有没有办法完成这个而不必复制 图案?
答案是&#34;否&#34;。与and
和or
不同,and
和concatenation
是正则表达式的基本属性。在正则表达式中,您可以使用or
轻松构建|
表达式,并分别使用\*\sZ
构建Z\:
表达式。
但无论如何,如果你仍然希望完成你的工作,我建议你这样做。
首先,你已经有了两种模式
xor
和
\*\sZ(?!\:)|(?<!\*\s)Z\:
所以,正如你所说,这两种模式不可能同时发生。
所以来自UIImageView
的属性:
A x或B =(A&amp; ~B)|(~A&amp; B)。
最后,我们可以得到
exampleImageView
查看DEMO