我只是在尋找一些有關最佳實踐的建議。檢查空的字符串或空白字符的最佳方法是什麼?在Perl中檢查空字符串
我通常使用像這樣的$string =~/^\s*$/
正則表達式來查看變量是否爲空。有一種更爲接受的方式,或者這種方式與其他方式一樣好?使用正則表達式還是chomp,然後檢查空字符串更好?
謝謝。
我只是在尋找一些有關最佳實踐的建議。檢查空的字符串或空白字符的最佳方法是什麼?在Perl中檢查空字符串
我通常使用像這樣的$string =~/^\s*$/
正則表達式來查看變量是否爲空。有一種更爲接受的方式,或者這種方式與其他方式一樣好?使用正則表達式還是chomp,然後檢查空字符串更好?
謝謝。
就個人而言,我通常反轉意義,並搜索單個非空白字符。所以我會這樣說:
next unless $string =~ /\S/;
由於池上提到,\s
(和\S
)可有點特質究竟被認爲是什麼字符的空白,並且可以使用\p{Whitespace}
(或在我的情況\P{Whitespace}
)爲更一致的結果。
出於好奇,我以not /\S/
與/^\s*\z/
爲基準。在一個80字符的字符串(使用Perl 5.14.2)中,我發現not /\S/
的空格字符串的速度快了大約20%,而/^\s*\z/
的空格字符串的速度大約快了30%。檢查空行不可能是程序中的瓶頸,但使用更簡單的正則表達式肯定不會造成傷害。
use Benchmark 'cmpthese';
our $text = ' ' x 80;
#our $text = 'abcd' x 20;
cmpthese(-3, {
'pos' => '$text =~ /^\s*\z/',
'neg' => 'not $text =~ /\S/',
'negU' => 'not $text =~ /\P{Whitespace}/',
});
例結果空間:
Rate pos negU neg
pos 3562012/s -- -2% -15%
negU 3651619/s 3% -- -13%
neg 4194275/s 18% 15% --
示例結果對於非空間:
Rate negU neg pos
negU 4951234/s -- -3% -24%
neg 5112271/s 3% -- -22%
pos 6555251/s 32% 28% --
非常感謝您爲此付出更多努力:) – Hameed
這非常好(儘管/^\s*\z/
會少一些冗餘)。
注意:它不匹配垂直製表符(U + 000B)。你可以使用\p{Whitespace}
。
注意:除非使用use 5.012;
或/u
,否則一個錯誤使得它在某些時間只匹配無間斷空格(U + 00A0)。 \p{Whitespace}
不受該錯誤影響。
感謝您花時間回答問題。 – Hameed
'chomp'和正則表達式不產生相同的結果... – 2012-06-04 05:47:11
我看到什麼你意思是。感謝您指出。 – Hameed