2011-08-02 40 views
8

Necesito escribir una expresión regular que coincida con todo en la cadena a menos que tenga una palabra determinada. Tomando esta cadena, por ejemplo:Regex: coincide con toda la cadena a menos que

http://12.34.567.890/sqlbuddy 

La expresión que coincide con todo lo que es:

^.*$ 

... ¿Qué necesita ser modificado para que se no coinciden con la cadena en absoluto si contiene la palabra "sqlbuddy". Pensé que una anticipación negativa lo haría, pero eso no funciona para mí.

Por ejemplo, yo probamos este, que no funciona:

^(?!sqlbuddy).*$ 

¿Cómo debería modificar esta?

Respuesta

5

El ejemplo no funciona porque se supone sqlbuddy está en el principio de la cadena. Es necesario cambiar a la siguiente, de modo que sqlbuddy pueden aparecer en cualquier parte de la cadena:

^(?!.*sqlbuddy.*).*$ 

Sin embargo, si lo que realmente quiere comprobar si su cadena contiene una palabra dada, entonces tal vez un "http://12.34.567.890/sqlbuddy".contains("sqlbuddy") será suficiente.

+0

Gracias. Lo estoy usando con mod_rewrite, así que no puedo usar .contains(), pero funciona y también lo hace la otra respuesta a continuación. Sin embargo, por alguna razón no coincide con el uso del probador de expresiones regulares en http://gskinner.com/RegExr/ – Allen

+0

@Allen, revise rubular, es lo que uso para mis pruebas Regex, y realmente me gusta. –

+0

+1 pero menor retoque: no es necesario el '. *' Después de 'sqlbuddy'. Esto es suficiente: '(? M)^(?!. *? Sqlbuddy). * $' O '(? M)^(?!. * Sqlbuddy). * $' Dependiendo de si desea ir flojo o retroceder . – zx81

2

Además, esto funcionó para mí: la posición de la cadena 'sqlbuddy' no importa.

^((?!sqlbuddy).)*$

+0

http://rubular.com/r/9MD67F0VtS Echa un vistazo. –

0

... también (para los demás), si desea buscar sólo en un lugar específico de una cadena [mucho] (texto largo con varios partidos), puede utilizar:

first_part_of_string(?!.*sqlbuddy.*)second_part_of_string 

o , más permisivo:

first_part_of_string.*(?!.*sqlbuddy.*).*second_part_of_string 
Cuestiones relacionadas