如何使用正则表达式测试一个字符串是否只包含空格字符?
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
}
/m
选项。这意味着 ^
和 $
匹配行的开头或结尾,从而允许锚点之前和之后的文本。为避免这种情况,请使用字符串的开头和结尾锚点:/\A\s*\z/
。 - brian d foy我决定编辑我的帖子,包括以下与tobyodavies的对话中的概念。
在大多数情况下,您想确定某个东西是否为空格,因为空格相对不重要,您想跳过仅由空格组成的字符串。因此,我认为您想确定的是是否存在重要字符。
所以我倾向于使用反向测试:$str =~ /\S/
。确定谓词“字符串包含一个Significant字符”。
然而,为了应用您的特定问题,可以通过测试来确定否定:$str !~ /\S/
\S
不是负面的,而是一个补集。 - Axemanif($str=~/\S/){ ... }
,因此_此答案_是一个双重否定。 - tobyodavies=〜
而不是!〜
作为运算符。那是第二个否定,而不是空格与打印字符相反(我对此提出异议-空格与字符是足够独立的概念,因为你可以在任何东西上留白...并且从词源上看,“whitespace”没有否定意义)。 - tobyodavies你的正则表达式语句应该寻找^\s+$。它需要至少一个空格。
如果你想知道,"white space"被定义为[\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.
/m
选项。这意味着^
和$
匹配行的开头或结尾,从而允许锚点之前和之后的文本。为了避免这种情况,请使用字符串的开头和结尾锚点:/\A\s*\z/
。 - brian d foy