2008-09-15 13 views
11

Es es posible construir una expresión regular que rechaza todas las cadenas de entrada?Expresión regular que rechaza todas las entradas?

+0

Por qué necesita 'regex' aquí, puede pensar en algunas otras opciones como' readonly inputs', if (input.length <0) ..., if (! Value) –

Respuesta

10

Probablemente esto:

[^\w\W] 

\ w - palabra de caracteres (letras, dígitos, etc.)
\ W - opuesto de \ w

[^ \ w \ W] - siempre debería fallar, porque cualquier carácter debería pertenecer a una de las clases de caracteres - \ w o \ W

Otros fragmentos:

$.^ 

$ - afirman posición al final de la cadena
^ - valer posición en la salida de la línea
. - cualquier carbón

(?#it's just a comment inside of empty regex) 

lookahead vacío/detrás debería funcionar:

(?<!) 
+0

¿Qué pasa con la cadena vacía? –

+0

Chris Conway, ¿estás bromeando? :) – aku

+0

No. El aspecto de estas expresiones regulares coincide con cualquier cadena que no esté vacía. ¿Qué pasa con la cadena vacía? Esa también es una entrada posible. –

-1

EDIT: [^ \ n \ r \ w \ s]

+0

¿No aceptaría todas las entradas? ¿instrumentos de cuerda? Creo que es posible que desee negar esa declaración. –

+0

Esto es exactamente lo contrario de lo que estoy buscando. Su expresión regular aceepts todo, lo que necesito es una expresión regular que rechaza todo. – Kasper

+0

Unkwntech, su expresión regular coincidirá con los símbolos de puntuación, etc. – aku

1

¿Por qué vas a querer eso? ¿No sería una simple declaración si el truco? Algo a lo largo de las líneas de:

if (inputString != "") 
    doSomething() 
0

[^ \ x00- \ xFF]

-1

Bueno,

No estoy seguro de si he entendido, ya que siempre pensé en la expresión regular de una forma de hacer coincidir cadenas. Yo diría que la mejor oportunidad que tiene no está usando expresiones regulares.

embargo, también se puede utilizar expresión regular que coincide con las líneas vacías como ^$ o una expresión regular que no coinciden con palabras/espacios como [^\w\s] ...

espero que ayude!

4
(?=not)possible 

? = Es una búsqueda positiva hacia delante. No son compatibles con todos los sabores de expresiones regulares, pero en muchos.

La expresión buscará "no", entonces buscan "posible" que comienza en la misma posición (ya que los símbolos de anticipación no se mueven hacia adelante en la cadena).

+0

Eso hizo mi día =). Bien hecho;) –

1

A mí me suena como que está atacando un problema por el camino equivocado, ¿qué es exactamente estás tratando de resolver?

que podría hacer una expresión regular que atrapa todo y negar el resultado.

por ejemplo en javascript:

if (! str.match(/./)) 

pero entonces se podría simplemente hacer

if (!foo) 

lugar, como @ [Jan-Hani] dijo.

Si usted está mirando para incrustar una expresión regular como en otra expresión regular, que podría estar buscando $ o ^ lugar, o usar los símbolos de anticipación como @ [Henrik-n] mencionado.

Pero como dije, parece un problema "Creo que necesito x, pero lo que realmente necesito es y".

0

Depende de lo que quiere decir con "expresión regular". ¿Te refieres a expresiones regulares en un lenguaje de programación o biblioteca en particular? En ese caso, la respuesta es probablemente sí, y puede consultar cualquiera de las respuestas anteriores.

Si te refieres a las expresiones regulares que se enseñan en las clases de informática, la respuesta es no. Cada expresión regular coincide con alguna cadena. Podría ser la cadena vacía, pero siempre coincide con algo.

En cualquier caso, le sugiero que edite el título de su pregunta para limitar qué tipos de expresiones regulares quiere decir.

2

Un ejemplo de por qué tal cosa podría necesitarse es cuando se quiere filtrar una entrada con expresiones regulares y pasar regex como argumento para una función.

En el espíritu de la programación funcional, para la integridad algebraica, es posible que desee algunas expresiones principales primarias triviales como "todo está permitido" y "no se permite nada".

0

[^]+ debería hacerlo.

En respuesta al comentario de aku adjunto a esto, lo probé con un probador de expresiones regulares en línea (http://www.regextester.com/), así que supongo que funciona con JavaScript. Debo confesar que no lo estoy probando en un código "real". ;)

+1

Me pregunto, ¿qué motor de expresiones regulares admite esto? AFAIK, [^] no se compilará en la mayoría de los procesadores – aku

+0

En JavaScript, '[^]' coincide con ** cualquier carácter **. Es una alternativa más sucinta a la expresión '[\ s \ S]' para hacer coincidir cualquier carácter, incluidas las nuevas líneas, pero no lo use. Como dijo @aku, la mayoría de los sabores de expresiones regulares lo tratarán como un error de sintaxis. Pero el problema más grande es que pueden malinterpretarlo como parte de una expresión regular más larga. Por ejemplo, '[^] [^]' coincide con dos de los caracteres en JavaScript, pero en PHP coincide con * uno * de cualquier carácter que no sea ']', '[' ni '^'. –

5

Los mejor regexs estándar (es decir, no lookahead o de copia de referencias) que rechazan todas las entradas son (después de @aku anteriormente)

.^ 

y

$. 

Estos son contradicciones planas: "una cuerda con un personaje antes de su comienzo" y "una cuerda con un personaje después de su final".

NOTA: Es posible que algunas implementaciones de expresiones regulares rechazarían estos patrones como mal formado (que es bastante fácil comprobar que ^ llega al comienzo de un patrón y $ al final ... con una expresión regular), pero los pocos que he comprobado los aceptan. Tampoco funcionarán en las implementaciones que permiten ^ y $ para coincidir con las nuevas líneas.

Cuestiones relacionadas