Su misión es escribir la expresión regular válida más corta que ninguna cadena pueda coincidir, incluida la cadena vacía.
Los envíos deben tener esta forma ("notación literal"):
/pattern/optional-flags
La expresión regular más corta gana. El tamaño de expresión regular se cuenta en caracteres. (incluyendo barras y banderas)
Por favor, explique cómo funciona su expresión regular (si no es trivial)
Gracias y diviértete!
Respuestas:
6 caracteres
Siguiendo las respuestas de primo y Peter Taylor, y una pista de
man perlre
:/(?!)/
Esta expresión regular compatible con perl coincide con una cadena vacía que no es seguida por otra cadena vacía.
fuente
/x\by/
, pero si alguna vez tuve que usar una expresión regular como esta, por alguna razón, entonces esta respuesta también es la más clara)/(*FAIL)/
sin embargo, primo es probablemente más claro. (Y en realidadman perlre
lo delató al mencionar que el mío realmente se expande internamente)./(*FAIL)/
Sin embargo, no es tan portátil. E incluso en Perl, creo que es una característica más oscura que una anticipación negativa.-Mre=debug
) dice que(?!)
está optimizado(*FAIL)
por Perl regex optimizer (OPFAIL
según-Mre=debug
). Además, no creo haber visto(*FAIL)
fuera de Perl 5 (y Perl 6, donde se llama<!>
).8 caracteres
Requerimos una cadena que contenga un carácter que sea ambos
a
yb
que obviamente es imposible.fuente
/(?!x)x/
parece aún más imposible ;-)5 caracteres
A diferencia de todos los que abusan
$
y^
... esto realmente funciona en Perl:\A
coincide con el comienzo de la cadena.fuente
^
también.6 caracteres
Basado en la respuesta de Sven Hohenstein .
fuente
8 caracteres
Un límite de palabra (
\b
) rodeado de caracteres de 'palabra' (\w
- uno de[_a-zA-Z0-9]
). Es inigualable ya que uno de los caracteres que preceden o siguen a un límite de palabra debe ser un carácter que no sea 'palabra'.Por cierto: esto es similar a la expresión inigualable
donde
\W
significa carácter que no es 'palabra'.fuente
/
cuentan. Ver la entrada de OP, por ejemplo . ¡Sin embargo, es una gran entrada!4 caracteres
busca una "a" después del final de la cadena.
o
busca un antes del comienzo de la cadena.
fuente
^
y$
en posiciones "ilegales" solo hace que sean tratados como personajes ordinarios. Su primer ejemplo coincide con el literal$a
ensed
y probablemente otros programas.echo 'a^b' | grep 'a^b'
vsecho 'a^b' | grep -E 'a^b'
. Echa un vistazo a 9.4.9 ERE Expression5 personajes
/$.^/
/$^/
coincidirá con una cadena vacía, mientras que requerir un carácter intermedio no lo hará.fuente
"$a^"
(o cualquier cosa en lugar de'a'
) en Perl ( y tal vez sed ). Sin embargo, sigue siendo agradable.$.
como la variable actual del número de línea. Que podría estar vacío, en cuyo caso será así/^/
.^
y$
'$^'
con grep, pero desafortunadamente coincidía con la cadena'$^'
. Smartass grep.9 caracteres
No estoy seguro, pero
/[^\S\s]/
debería ser inigualable ya que no significa ningún personaje, sino al menos uno de ellos.fuente
+
.6 personajes
Creo que esta expresión regular que hice funcionará:
Coincide con un límite de palabra (
\b
) que no es un límite de palabra (\B
). Lo que es imposible, ¿realmente tengo que explicarte esto?fuente
4 personajes
(Solo sabor ECMAScript)
En otros sabores, esta no es una clase de caracteres válida (
]
se consideraría un carácter en la clase, por lo que la expresión no es válida, porque la clase nunca está cerrada), pero el estándar ECMAScript acepta clases de caracteres vacías. Dado que es una clase que tiene para que coincida con un personaje (por lo que las cadenas vacías no coinciden), pero ya no se incluye un solo carácter sin carácter real corresponde a ninguno.fuente
/[]{0}/
? (Ps. Aunque mi propia respuesta se parece parcialmente a la suya, en realidad leí la suya después de escribir la mía.)/[]/.test("")
. devuelve falso una clase de caracteres nunca puede coincidir con una cadena vacía, incluso si no contiene caracteres (imagino que se implementan como "SI el siguiente carácter en la cadena es uno de los enumerados, coincida; ELSE falla")./[]{0}/
es legal (en ECMAScript) y coincide con la cadena vacía ... sin embargo, no estoy seguro de cómo eso es relevante para mi respuesta.6 caracteres
El cuantificador posesivo busca tantos b como sea posible, luego 1 más. ¿6 caracteres pero puntos de simetría?
fuente
6 personajes
No es un ganador, pero pensé que era divertido. grep y Python vomitan en este caso, pero Perl parece estar de acuerdo con eso.
Parece ser muy dependiente de la implementación (lo cual no es sorprendente, dada su rareza). Bob informa a continuación que coincide con cualquier cosa en el motor de expresiones regulares de JavaScript.
fuente
Tal vez un poco de trampa, pero ...
... es inigualable en POSIX regex en prácticamente todas, si no todas, las implementaciones. RE BÁSICO y RE EXTENDIDO, incluso.
Y POSIX RE no necesita esas barras y banderas molestas que PCRE tiene.
fuente
0
no funciona en PERL."0"=~0
es cierto ...\0
ITYM? Sí, la mayoría de las implementaciones de perlre (1) y PCRE no usan cadenas C sino buffers de tamaño limitado, en quienes este truco no funcionará, pero la mayoría de las implementaciones de POSIX RE funcionan en cadenas C.5 caracteres
Coincide con la cadena que comienza con cualquier carácter individual antes de que comience la cadena.
fuente
".^"
re.findall(r'^.^', '.^', re.DEBUG)
^
y.
son metacaracteres no literales, que deben escaparse4 char:
Funciona con GNU grep 2.5.1 y egrep.
fuente
/.^/
= 4 caracteres//
? esos no son necesarios en todas partes ;-)/
recuento de barras inclinadas cuenta, vea la pregunta original ("incluyendo barras inclinadas y banderas") y la entrada del OP .Perl 6 (5 caracteres)
Abuso de reglas de Sorta (porque las expresiones regulares de Perl 6 son diferentes e incompatibles con las expresiones regulares estelares por diseño), pero no me importa.
<!>
La regla informa a Perl 6 que la expresión regular no coincide.fuente
6 bytes
Una abreviatura de
(*FAIL)
, compatible con motores regex compatibles con perl. Gracias a @HamZa por señalar esto.9 bytes
Debería funcionar con cualquier motor regex que sea compatible con los verbos. No estoy convencido de que esto realmente deba seguir jugando golf.
fuente
(*FAIL)
es un verbo que siempre falla./(*F)/
:)4 caracteres
Necesita cualquier carácter después de que termine la cadena
fuente
$
solo es especial al final del patrón.4 caracteres con barras 2 sin
En el motor de expresiones regulares del lenguaje TXR, una clase de caracteres vacía
[]
no coincide con ningún carácter y, por lo tanto, sin cadena. Se comporta de esta manera porque la clase de caracteres requiere una coincidencia de caracteres y, cuando está vacía, especifica que ningún carácter puede satisfacerla.Otra forma es invertir el "conjunto de todas las cadenas que incluyen vacío" expresiones regulares
/.*/
usando el operador de complemento:/~.*/
. El complemento de ese conjunto no contiene cadenas, por lo que no puede coincidir con nada.Todo esto está documentado en la página del manual:
Las barras no son parte de la sintaxis de expresiones regulares per se; son solo signos de puntuación que delimitan expresiones regulares en la notación de expresión S. Testigo:
fuente
6 caracteres
(o 4, dependiendo de cómo lo mires)
fuente
Esta es una expresión regular de 5 caracteres.
Coincide con un grupo vacío 1 o más veces.
EDITAR:
Eliminó mi respuesta para otros sabores:
Cualquier cosa que no sea un número dentro de {} coincidirá con el texto.
Este coincidirá con ". {- 1}"
fuente
5 personajes
Espero que esto no suene estúpido:
/[]+/
fuente
Una cosa que termina antes de que haya comenzado ...
fuente
""
, que no coincide con una cadena que contiene los dos caracteres literales:"$^"
.