我正在學習正則表達式,並看到了一小段我無法完全理解的代碼。我知道它是什麼,因爲它被解釋here測試字符串是否爲空的正則表達式
我知道插入符號,^
是用來匹配字符串的開始。
我知道美元符號$
用於匹配字符串的末尾。
/^$/
如何匹配空字符串?在我看來,它說:「匹配字符串的開頭和結尾。」當然,每個字符串都有一個開始和結束。 「空虛」來自哪裏?
我正在學習正則表達式,並看到了一小段我無法完全理解的代碼。我知道它是什麼,因爲它被解釋here測試字符串是否爲空的正則表達式
我知道插入符號,^
是用來匹配字符串的開始。
我知道美元符號$
用於匹配字符串的末尾。
/^$/
如何匹配空字符串?在我看來,它說:「匹配字符串的開頭和結尾。」當然,每個字符串都有一個開始和結束。 「空虛」來自哪裏?
如何/^$/
匹配空字符串
^
匹配開始時
$
字符串的結尾匹配。
由於沒有什麼betweent的兩個錨,字符串爲空
例子:http://regex101.com/r/kK9aW2/1
注意
當我們寫一個正則表達式/ab/
相匹配的a
並立即跟着b
這並不意味着它匹配字符串中的a
或b
。這意味着它的字符串
這是正則表達式匹配abc
而不是acb
什麼你缺少的是序列的概念在匹配ab
。
只需從左到右閱讀您的正則表達式:它的真正含義不是「匹配字符串的開始和結束」,而是「匹配字符串的開頭,,然後字符串的結尾」。
由於中間沒有任何內容,此正則表達式只能接受(=匹配)空字符串。 (參見nu11p01n73R's answer)。
$
可以在換行符前匹配字符串或的末尾。
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=''
即立即開始字符串的起始,然後是字符串的結尾。 – nu11p01n73R 2014-11-23 16:42:44