2011-05-24 32 views

Respuesta

16
if($string=~/^\s*$/){ 
    #is 100% whitespace (remember 100% of the empty string is also whitespace) 
    #use /^\s+$/ if you want to exclude the empty string 
} 
+0

Tenga en cuenta que Perl tiene indicadores predeterminados para el operador de coincidencia, por lo que alguien puede haber establecido la opción '/ m' en otro lugar del alcance. Eso significa que '^' y '$' coinciden al principio o al final de las líneas, lo que permite el texto antes y después de los anclajes. Para evitar eso, use el principio y el final de los anclajes de cadena: '/ \ A \ s * \ z /'. –

1

Su declaración de regular debería buscar^\ s + $. Se requerirá al menos un espacio en blanco.

En caso de que se esté preguntando, "el espacio en blanco se define como [\ t \ n \ f \ r \ p {Z}]". Ver http://userguide.icu-project.org/strings/regexp.

\t Match a HORIZONTAL TABULATION, \u0009. 
\n Match a LINE FEED, \u000A. 
\f Match a FORM FEED, \u000C. 
\r Match a CARRIAGE RETURN, \u000D. 
\p{UNICODE PROPERTY NAME} Match any character with the specified Unicode Property. 
+0

Tenga en cuenta que Perl tiene indicadores predeterminados para el operador de coincidencia, por lo que alguien puede haber configurado la opción '/ m' en otro lugar en el alcance. Eso significa que '^' y '$' coinciden al principio o al final de las líneas, lo que permite el texto antes y después de los anclajes. Para evitar eso, use el principio y el final de los anclajes de cadena: '/ \ A \ s * \ z /'. –

+0

También, vea [perlrecharclass] (http://perldoc.perl.org/perlrecharclass.html) para la definición de Perl de espacios en blanco. –

9

(he decidido editar mi post para incluir los conceptos de la siguiente conversación con tobyodavies.)

En la mayoría de los casos, se desea determinar si algo es o no un espacio en blanco, ya que el espacio en blanco es relativamente insignificante y desea omitir una cadena que consiste simplemente en espacios en blanco. Entonces, creo que lo que quieres determinar es si hay o no personajes significativos.

Así que tiendo a usar la prueba inversa: $str =~ /\S/. La determinación del predicado "cadena contiene un S carácter significativo".

Sin embargo, para aplicar su pregunta en particular, esto puede ser determinado de forma negativa por la prueba: $str !~ /\S/

+1

+1: Buen pensamiento. –

+3

Depende completamente de si desea que "" coincida o no. – ysth

+1

no es fan de los dobles negativos - no * contiene * no * espacios en blanco ... no está seguro de esto, pero definitivamente es una forma interesante de resolver el problema. – tobyodavies

-2

Si desea comprobar la dada String por si sólo contiene caracteres de espacio en blanco o no en expresiones regulares ...

String given_string=" \t "; //add spaces and tabs any white space character 
System.out.println(given_string.matches("^\\s+$")); 

Comprobará al menos un carácter de espacio en blanco que comience desde el principio de la cadena, hasta el final, si aparece un carácter no en blanco, devolverá falso. Funciona para caso NULL y líneas nuevas también (^_^)

Cuestiones relacionadas