我正在处理正则表达式,它与空消息或空白消息匹配。
我需要知道是否有人向我们发送了空白"仅包含空格或表格或新行的消息。
我在这里做了什么,但我对此并不满意:
^[\n,\r]{2,}$
由于
答案 0 :(得分:1)
我首先在问题中解释正则表达式^[\n,\r]{2,}$
。
^
...在消息字符串的开头开始搜索。
[\n,\r]
...匹配换行符\n
(换行符)或逗号,
或回车符\r
的字符类定义。逗号在这里并不是真的想要的。提问者最有可能认为表达式中的字符需要以逗号分隔,但事实并非如此。
{2,}
...表示字符类定义 - 3个字符的OR - 应该至少应用2次或更多次以获得肯定结果。
$
...在消息字符串末尾停止搜索。
因此,如果整个消息字符串包含至少2个字符(逗号,回车符或换行符),则表达式^[\n,\r]{2,}$
将返回正数。如果消息字符串为空(无字符),或者只有3个字符中的1个或包含任何其他字符,则表达式返回负数,这意味着找不到字符串。因此,提问者的正则表达式对于验证消息是空白消息还是空消息没有用。
Sam和sp00在他们的评论中写道,而不是使用^\s*$
,因为这个表达意味着更好。
^
...在消息字符串的开头开始搜索。
\s
...匹配任何空格字符。有关使用Perl v5.18时\s
匹配的内容的详细信息,请参阅Perl regular expression character class description。应该通过\s
测试所使用的正则表达式引擎确实匹配哪个空白字符。特别是不间断空格字符在这里也很有趣,用于检查空白/空消息。
*
...表示字符类定义 - 任何空白字符 - 应该至少应用0次或更多次以获得肯定结果。
$
...在消息字符串末尾停止搜索。
因此,如果整个消息字符串根本没有字符或仅包含1个或多个空格字符,则表达式^\s*$
将返回正数。因此,根据空白/空白消息检查该表达式要好得多。
另一个有用且简单的正则表达式是^\W*$
,如果整个邮件根本没有字符或只有非单词字符,则返回正数。
除了只包含emoticons的邮件是可接受的之外,没有任何字母,数字或下划线的邮件很可能没有任何意义。
但请注意,^\W*$
不足以检查邮件是否包含真正有用的文本,因为单个字母,数字或下划线结果已经存在于否定匹配中,因此邮件会通过验证检查。