regex - especiales - probar expresiones regulares
La expresión regular más corta para el número binario con número par de 0s o número impar de 1s (5)
Escribe una expresión que contenga un número par de 0s o un número impar de 1s
Lo bajé a
1*(01*01*)* + 0*10*(10*10*)*
donde la primera parte representa un número par de 0s y la segunda parte un número impar de 1s
Sin embargo, se supone que hay una solución simplificada que no estoy viendo. ¿Algun consejo?
Con la menor cantidad de símbolos,
1*(01*01*)*
Definir "más corto". Si está buscando el tiempo de evaluación más corto (es decir, el más rápido), asegúrese de no utilizar grupos de captura.
Aquí hay un ejemplo en javascript
^(?:1*(?:01*0)*)+|0*1(?:0*(?:10*1)*)*$
que se muestra un 20% más rápido que esta expresión que usa grupos de captura pero le dará la misma respuesta
^(1*(01*0)*)+|0*1(0*(10*1)*)*$
Haciendo uso del hecho de que las cadenas de longitud uniforme SIEMPRE satisfacen sus restricciones:
^(([01]{2})*|1*(01*01*)*)$
La solución más simplificada que encontré es:
1+0(0+1)((1+0)(1+0))*
Parte impar-1: 0*1(0|10*1)*
Parte de Even-0s, depende:
- La cadena vacía es correcta:
(1|01*0)*
- No-0s es even-0s:
(1|01*0)+
- Debe tener al menos dos 0:
1*(01*01*)+
(como en OP)
respuesta antigua: correcta en los casos 1 y 2
(1*(01*0)*)+ | 0*1(0*(10*1)*)*
Felicitaciones a @OGHaza por comentarios útiles.