2013-11-27 3 views
0

Я пытаюсь написать выражение регулярного выражения, чтобы исключить двоичные строки, содержащие 010.
Я не совсем уверен, что писать.Regex, который не содержит подстроки 010

я это, чтобы начать с, но я не слишком уверен, что делать:

1*(0+10)* 

Спасибо!

+0

На практике, я бы рекомендовал два регулярных выражения, если это возможно: '/ 010/&&/whateverelse /' – user2864740

+1

Если это для класса автоматов! , затем разверните * принятые * формы. – user2864740

ответ

1

Если вы хотите, чтобы соответствовать двоичной строки (строки, содержащие только 1 'с и 0 iS), но исключить строки, которые содержат строку 010, возможно, использовать что-то вроде этого:

^((?!010)[01])*$ 

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

+1

Для этого требуется Perl-совместимое регулярное выражение, в то время как похоже, что OP ищет чистый BRE. – tripleee

0

Для вашей попытки требуется любое количество нулей, за которыми следует 10, что явно является нарушением вашего ограничения. Вместо этого необходимо, чтобы для каждого 1 следовало по крайней мере еще одно или конец строки.

(0*(1(1+|$))*)* 
0

Используйте закрепленную негативный взгляд вперед:

^(?!.*010)[01]+$ 
Смежные вопросы