termina regulares regular probar expresiones expresion especiales espacio ejemplos cualquier con caracteres caracter blanco alfanumerico regex regular-language finite-automata

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:

  1. La cadena vacía es correcta: (1|01*0)*
  2. No-0s es even-0s: (1|01*0)+
  3. 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.