Su tarea aquí es escribir dos expresiones regulares, cada una de las cuales coincide con la otra pero no concuerda.
Ambas expresiones regulares deberían tener esta forma:
/pattern/optional-flags
Esta es también la forma en que deben coincidir.
La solución más corta gana. La longitud de la solución se cuenta como la suma de caracteres en ambas expresiones regulares, incluidas las barras inclinadas y las banderas.
Utilice un estándar de sintaxis de expresiones regulares de su elección, o especifique un lenguaje de programación, cuando haga la diferencia.
¡Que te diviertas!
code-golf
regular-expression
GOTO 0
fuente
fuente
/a/
coincide la expresión regularabc
?/^%/
y%^/%
)Respuestas:
PRCE con el modificador A: 9 caracteres
Aunque esta es una variante del pomo de la puerta
/modifier$/
respuesta , creo que esta innovación lo califica como una respuesta separada en lugar de un comentario sobre la suya: el modificador cumple una doble función. En lugar de estar allí solo para que coincida la otra expresión regular, se ancla.La primera expresión regular coincide con cualquier cadena que termine en un literal
A
. La segunda expresión regular coincide con cualquier cadena cuyo segundo carácter es un literalA
, utilizando un indicador de inicio de anclaje.Demostración en línea
fuente
//
coincide con cualquier cosa, eso significa que cada una de las expresiones regulares puede tener como máximo tres caracteres no delimitadores. Usando PHP PCRE hay 73339 expresiones regulares no coincidentes dentro de esa restricción, y aparece una verificación exhaustiva de los pares cuya longitud es inferior a 10 (del orden de 32 pares en lugar de 5.7 pares porque la mayoría de ellos son 5 caracteres, incluidos los delimitadores) Esta solución y ninguna otra. Por lo tanto, afirmo que es óptimo para ese motor regex en particular.4 + 6 = puntaje de 10
Primera expresión regular:
Segunda expresión regular:
¡Hurra por el abuso de la bandera! :-PAGS
El primero coincide con todo lo que termina con
i
(por lo tanto, cualquier expresión regular con lai
bandera).El segundo coincide con cualquier cosa con un segundo personaje de
i
.Versión alternativa:
/i$/g
y/g$/i
.fuente
/x.$/
y/^.x/
para un montón de x/i$/
y/\/$/i
/i$/
y/i\$/i
JavaScript regexes, puntuación: 18
Primera expresión regular:
Segunda expresión regular:
Prueba de JavaScript:
Prueba en línea: http://jsfiddle.net/99Sx6/
fuente
Ruby regex, 15
Expresiones regulares:
Solo contando personajes ...
Versión en línea
fuente
4 + 6 = 10
Primera expresión regular:
Segunda expresión regular:
i$
coincide con algo que termina coni
el segundo./$
coincide con algo que termina con/
el primero.fuente
5 + 5 = 10
Regex # 1:
Regex # 2:
los
0
s en ambas expresiones regulares se puede reemplazar con cualquier no-metacarácter y la expresión regular todavía funciona.0.$
coincide con cualquier cosa cuyo segundo último carácter es0
, y^.0
coincide con cualquier cosa cuyo segundo carácter es0
.fuente
/
es. La alternativa es un engaño de un comentario sobre la respuesta de Doorknob.JavaScript regexes, puntuación: 13
Primera expresión regular:
Segunda expresión regular:
Explicación: la primera expresión regular coincide con todo lo que contiene un dígito, y la segunda expresión regular coincide con todo lo que no contiene un
0
.Prueba de JavaScript:
Prueba en línea: http://jsfiddle.net/5VYjC/1/
fuente
12 caracteres ;) JS regex
fuente
Puntuación: 5 + 5 = 10
Me tomó media hora averiguarlo, pero estoy muy feliz de haberlo hecho :)
Primero es:
/j.$/
2do es:
/^.j/
El primero coincidió con el que
j
ocurrió en la segunda posición comenzando desde la derecha. El segundo coincide con el quej
ocurre en la segunda posición desde la izquierda.No lo he probado, pero creo que estos RegEx son realmente versátiles, ya que
j
se pueden reemplazar con cualquier\w
carácter (¿o más?) Y aún así deberían funcionar bien.PD: Esto (con suerte) debería funcionar en cualquier idioma. Sin embargo, si no funciona en ninguno, informe en los comentarios a continuación :)
Prueba
fuente
PCRE usando el modificador x: 11 caracteres
El primero coincide con cualquier cadena con un carácter de espacio en blanco, pero no contiene espacios en blanco. El segundo contiene espacios en blanco, pero se ignora debido al
x
modificador; coincide con cualquier cadena cuyo penúltimo carácter seas
.PCRE y otros motores que usan clases de caracteres: 11 caracteres
El primero coincide con cualquier cadena con un carácter de "palabra" (letra, dígito, guión bajo) seguido de un literal
w
; el segundo coincide con cualquier cadena con un carácter que no sea de palabra seguido de un literalw
.PCRE y otros motores que usan clases de caracteres y ancla de límite de palabra: 11 caracteres
El primero coincide con cualquier cadena con dos caracteres consecutivos de "palabra"; el segundo, cualquier cadena con un carácter que no sea de palabra o inicio de cadena seguido de un literal
w
.fuente
ECMAScript (11 bytes):
Otros motores REGEXP (14 bytes):
Los primeros partidos \ d [..] o \ 1d [..].
El segundo coincide con cualquier cadena con un número.
EDITAR:
Originalmente, esta respuesta se publicó como compatible con todos los motores, pero se demostró que era incorrecta.
Hubo un problema con las referencias a los grupos de captura (por ejemplo, en php).
fuente
\1
sin interpretarlo como referencia?"/^\1?d/"
tendrás problemas, pero si lo haces'/^\1?d/'
, entonces está bien. Las citas hacen una gran diferencia cuando se interpreta el código.