8

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

您如何跟踪偶数/奇数?

样本

  • aaa1
  • aaa0
4

2 回答 2

11

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

或者

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

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

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

于 2013-08-04T07:56:50.787 回答
10

你可以使用:

^(?:aa)*(?:a1|0)$
于 2013-08-04T07:54:44.713 回答