SO üzerinde good discussionsregular expressions and empty lines zaten vardır. Yinelenen bu soruyu kaldırırım.Boş ve boş satırlar arasındaki farklar regexps içinde
Bu betiğin neden 4 3 4 4 4 3
yerine 5 3 4 5 4 3
çıktısını açıklayabilir misiniz? $blank
ve $classyblank
hata ayıklayıcısında çalıştırdığımda, yazdırma deyiminin hemen öncesine kadar "4" (doğru değer olduğunu varsayar) kalır.
my ($blank, $nonblank, $non_nonblank,
$classyblank, $classyspace, $blanketyblank) = 0 ;
while (<DATA>) {
$blank++ if /\p{IsBlank}/ ; # POSIXly blank - 4?
$nonblank++ if /^\P{IsBlank}$/ ; # POSIXly non-blank - 3
$non_nonblank++ if not /\S/ ; # perlishly not non-blank - 4
$classyblank++ if /[[:blank:]]/ ; # older(?) charclass blankness - 4?
$classyspace++ if /^[[:space:]]$/ ; # older(?) charclass whitespace - 4
$blanketyblank++ if /^$/ ; # perlishly *really empty* - 3
}
print join " ", $blank, $nonblank, $non_nonblank,
$classyblank, $classyspace, $blanketyblank , "\n" ;
__DATA__
line above only has a linefeed this one is not blank because: words
this line is followed by a line with white space (you may need to add it)
then another blank line following this one
THE END :-\
o
__DATA__
bölüm ile ilgili bir şey ya da ben POSIX normal ifadelerini yanlış anlama am mı?
ps: zamanında yazı elsewhere üzerine yorumunda belirtildiği gibi
, "Gerçekten boş" (/^$/
) olmayan boşluğu kaçırabilir:
perl -E 'my $string = "\n" . "foo\n\n" ; say "empty" if $string =~ /^$/ ;'
perl -E 'my $string = "\n" . "bar\n\n" ; say "empty" if $string =~ /\A\z/ ;'
perl -E 'my $string = "\n" . "baz\n\n" ; say "empty" if $string =~ /\S/ ;'
Daha sonra farklı dillerde [python hariç, ancak Tamam] oldukça tutarlı olan if/\ A \ Z/'ve' if/\ A \ z/'... var (http://stackoverflow.com/ sorular/7063420/perl uyumlu-düzenli-ifade-pcre-in-piton). –
'Bu perl 5, sürüm 22, subversion 0 (v5.22.0) amd64 freebsd' –
için oluşturulmuştur. Temel sorunuzla ilgili değil, '$ string = "\ n", "foo \ n \ n" ' "$ string" için tek bir yeni satır atar. Geri kalanlar virgül operatöründen dolayı atılır. – ThisSuitIsBlackNot