2010-10-12 7 views
-3

Возможно ли иметь регулярное выражение для соответствия строке с чередующимися 0 и 1? Он может заканчиваться на 0 или 1, а длина произвольная.Regex to match 010101

+9

Что вы имеете в виду, «как это?» – Pops

+2

Если у вас есть только конечное число возможных слов, всегда существует регулярное выражение, которое может соответствовать им. –

+9

downvoted, потому что в 6200 rep вы должны знать, как написать такой вопрос на данный момент http://tinyurl.com/so-hints ... – jcolebrand

ответ

7

Да, это возможно. (?:01)*0? допускает произвольное количество «01», необязательно сопровождаемое 0, при условии регулярных выражений, подобных PCRE, с группами, не связанными с захватом.

Обратите внимание, что это включает пустую строку. Если вам нужен хотя бы один символ (0) или, по крайней мере, одна группа из «01», которая также может обрабатываться с 0(?:10)*1? и (?:01)+0?, соответственно.

+0

Что означает '?:'? – javaguy

+2

@javaguy: Обычно в регулярном выражении вы можете сделать группу захвата с помощью '()', а затем вы можете получить часть, которая была сопоставлена ​​этой группой после того, как механизм regex посмотрел на вашу строку. Однако иногда вам действительно не нужно или не хочет его захватить. Для этой цели вы можете использовать группу, не связанную с захватом, которую вы получите, поставив '?:' В начале группы, как в моем ответе. –

+0

Если вы используете (01) *, что будет содержаться в группе? – javaguy

0

(010101)|(010100)

+2

Кроме того, что вы пропустили «длина произвольная» ...;) –

+0

Хммм, когда я ответил на вопрос, он не включал «length is произвольно» ... –

11

Регулярное выражение для всех возможных двоичных строк будет ^(0|1)*$. Сюда входит пустая строка. Не включая пустую строку, которую вы использовали бы ^(0|1)+$.

Это то, о чем вы спрашиваете?

Edit: Если это так, что вы ищете чередование 0 и 1, вы можете сделать это, а также:

^1?(01)*0?$ должен соответствовать всем возможным комбинациям. Если вы хотите, чтобы строка всегда начиналась с 0, вы можете использовать ^(01)*0?$ (включая пустую строку) или ^(01)+0?$ (исключая пустую строку).

+0

Я считаю, что он ищет строку, состоящую из чередования 0s и 1s. –

+0

@ Майкл Мэдсен: Ах, я думаю, вы, возможно, были правы. Я не был уверен, что именно захочет OP, но я отредактировал это. Спасибо. – eldarerathis

+0

Я бы не стал доверять этому вопросу, пока он на самом деле не редактирует его, чтобы быть немного более похожим на вопрос ... кислый виноград? Наххх ... просто поиск действительно полезного вопроса - это все. – jcolebrand

0

Просьба предоставить более подробную информацию. Из информации, которую мы следующее будет работать:

[01]+ 
+0

Он говорит, что хочет чередовать. Там нет чередования. –

+0

Да, но вопрос немного вводит в заблуждение :) – monokrome

2

Я предполагаю, что вы хотите

((01)*(0)?) 

Но вопрос очень неоднозначный