Как проверить, является ли строка только пробелом в perl

Какой хороший способ проверить, содержит ли строка только пробельные символы с регулярным выражением?

Ответ 1

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
}

Ответ 2

(Я решил отредактировать мой пост, чтобы включить концепции в нижеперечисленный разговор с tobyodavies.)

В большинстве случаев вы хотите определить, является ли что-то пробелом, потому что пробел относительно незначителен, и вы хотите пропустить строку, состоящую из простого пробела. Итак, я думаю, что вы хотите определить, есть ли существенные символы.

Поэтому я стараюсь использовать обратный тест: $str =~ /\S/. Определение строки предиката содержит один символ S.

Однако, чтобы применить ваш конкретный вопрос, это можно определить отрицательным путем тестирования: $str !~ /\S/

Ответ 3

Ваше выражение регулярного выражения должно искать ^\s + $. Это потребует хотя бы одного пробела.

Если вам интересно, "пробел определяется как [\ t\n\f\r\p {Z}]". См. 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.

Ответ 4

Если вы хотите проверить заданный String для того, содержит ли он только символы пробела или нет в регулярном выражении...

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

Он проверит, по крайней мере, один символ пробела, начиная с начала строки, до конца, если встречается какой-либо символ без пробелов, он вернет false.it работает для случая с NULL и в случае с новыми строками ( ^ _ ^)