2013-08-04 3 views
6

У меня есть вопрос с регулярным выражением, который я не знаю, как это сделать. Он должен соответствовать всем строкам, состоящим из любого числа a в начале, а затем либо для одного 0, если число a равно или одно, если число a было нечетным.Regex Odd/Even Amount

Как вы можете отслеживать четные/нечетные?

Образец

  • AAA1
  • aaaa0
+2

Вы пробовали что-нибудь? –

+0

Вставьте несколько строк примеров. –

ответ

10

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

или

^(?:a(?:aa)*1|(?:aa)+0)$ если вы используете захваты.

Первая часть: a(aa)*1 будет соответствовать любому нечетному числу, за которым следует один, а вторая часть: (aa)+0 будет соответствовать любому четному числу, за которым следует ноль.

Вы не можете отслеживать количество совпадений компонента шаблона в регулярных выражениях. У них нет памяти. К счастью, вы можете обойти это ограничение в этом случае.

+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)$ 
Смежные вопросы