正则表达式,用于测试string是否为空

时间:2014-11-23 16:39:54

标签: regex

我正在学习正则表达式并看到了我无法完全理解的这段代码。我知道它的作用,因为它被解释为here

我知道插入符号,^用于匹配字符串的开头。

我知道美元符号$用于匹配字符串的结尾。

/^$/如何匹配空字符串?在我的脑海里,它说,"匹配字符串的开头和结尾。"当然,每个字符串都有一个开头和一个结尾。在哪里,"空虚"进来?

3 个答案:

答案 0 :(得分:2)

/^$/如何匹配空字符串

  • ^与开头

  • 相匹配
  • $匹配字符串的结尾。

由于两个锚点之间没有任何内容,因此字符串为空

示例:http://regex101.com/r/kK9aW2/1

注意

当我们写一个正则表达式/ab/

a匹配,并紧跟b

这并不意味着它匹配字符串中的ab。这意味着它匹配字符串

中的ab

这是正则表达式匹配abc而不是acb

答案 1 :(得分:0)

您缺少的是序列的概念。

从左到右阅读你的正则表达式:它的真正含义不是“匹配字符串的开头和结尾”,而是“匹配字符串的开头,然后结束字符串“。

由于中间没有任何内容,此正则表达式只能接受(=匹配)空字符串。

(见nu11p01n73R's answer)。

答案 2 :(得分:0)

$可以在换行符之前匹配字符串 OR 的结尾。

Perl中的示例:"\n" =~ /^$/也匹配,但字符串显然不是空的 在这种情况下,它在换行符之前匹配(最后换行符在单行模式下),因为
正则表达式不允许匹配^和$之间的任何内容。

以下是一些值得注意的示例和事项。

** String containing single newline \n ..
"\n" =~ /(^$)/ -- matches, $1=''
"\n" =~ /(^\n$)/ -- matches, $1='\n'
"\n" =~ /(^$)(.\z))/s -- matches, $1='', $2='\n'

** Real empty string ..
"" =~ /(^$)/ -- matches, $1=''
"" =~ /(^\z)/ -- matches, $1=''