Попробуйте следующее регулярное выражение:
^0(?=(?:(?:[^1]*1){2})+[^1]*0$).*
подробности:
^0
- начало строки и (начальное) 0
.
(?=
- Позитивный прогноз на:
(?:
- группа без захвата (внешняя).
(?:
- Еще одна (внутренняя) группа без захвата, содержащая:
[^1]*1
- (возможно, пустая) последовательность символов, отличная от 1
и 1
.
){2}
- происходит 2 раза (пара).
)+
- Эта группа (пары единиц) может встречаться несколько раз (четное количество единиц).
[^1]*
- (возможно, пустая) последовательность символов, отличная от 1
0$
- 0
и конец строки (заканчивающийся 0).
)
- Конец позитивного взгляда.
.*
- сопоставить всю строку.
Если вы согласны с тем, что 1
символов отсутствуют, измените +
после внешнего захвата
группа до *
.
Рабочий пример см. https://regex101.com/r/FvP0Ud/1
Вы можете поэкспериментировать с этим регулярным выражением, добавив / удалив 1
символов в начале
/ end / в середине строки и проследите, соответствует ли строка
или нет.
Еще одна деталь: приведенное выше регулярное выражение позволяет также цифры, отличные от 0
и 1
и вообще все персонажи. Если вы хотите ограничить разрешенные символы
просто 0
и 1
, измените [^1]
на 0
(в обоих местах).