2014-11-23 238 views
-1

我正在學習正則表達式,並看到了一小段我無法完全理解的代碼。我知道它是什麼,因爲它被解釋here測試字符串是否爲空的正則表達式

我知道插入符號,^是用來匹配字符串的開始。

我知道美元符號$用於匹配字符串的末尾。

/^$/如何匹配空字符串?在我看來,它說:「匹配字符串的開頭和結尾。」當然,每個字符串都有一個開始和結束。 「空虛」來自哪裏?

+4

即立即開始字符串的起始,然後是字符串的結尾。 – nu11p01n73R 2014-11-23 16:42:44

回答

2

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

  • ^匹配開始時

  • $字符串的結尾匹配。

由於沒有什麼betweent的兩個錨,字符串爲空

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

注意

當我們寫一個正則表達式/ab/

相匹配的a並立即跟着b

這並不意味着它匹配字符串中的ab。這意味着它的字符串

這是正則表達式匹配abc而不是acb

0

什麼你缺少的是序列的概念在匹配ab

只需從左到右閱讀您的正則表達式:它的真正含義不是「匹配字符串的開始和結束」,而是「匹配字符串的開頭,,然後字符串的結尾」。

由於中間沒有任何內容,此正則表達式只能接受(=匹配)空字符串。 (參見nu11p01n73R's answer)。

0

$可以在換行符前匹配字符串的末尾。

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=''