2013-08-04 31 views
6

我有一个正则表达式问题,我不知道该怎么做。 它必须匹配包含任意数量的a的所有字符串,然后如果a的数目是偶数,则可以是单个0,如果a的数目是奇数,则可以是单个1。正则表达式奇/偶数量

如何跟踪偶数?

样品

  • AAA1
  • aaaa0
+2

你尝试过什么吗? –

+0

粘贴一些示例字符串。 –

回答

10

^(a(aa)*1|(aa)+0)$

^(?:a(?:aa)*1|(?:aa)+0)$如果您使用捕获。

第一部分:a(aa)*1将匹配a的任意奇数,后面跟一个,第二部分:(aa)+0将匹配任何偶数个a,后跟零。

您无法跟踪正则表达式中模式组件的匹配数量。他们没有记忆。幸运的是,在这种情况下你可以绕过这个限制。

+0

谢谢你的回答,你能解释一下吗?:,我知道吗?意味着0或1,但它们是什么意思呢? –

+0

(?:pattern)只是Java中(模式)的非捕获等价物。如果您没有在匹配器中检查组,那么这两种模式都是相同的。在这种情况下,它并不意味着0或1. http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html –

7

你可以使用:

^(?:aa)*(?:a1|0)$