good discussionsはすでにregular expressions and empty linesになっています。この質問が重複している場合は削除します。正規表現の空白行と空白行の違い
誰でもこのスクリプトが4 3 4 4 4 3
の代わりに5 3 4 5 4 3
を出力する理由を説明できますか?私がデバッガでそれを実行すると、$blank
と$classyblank
は、print文の直前まで "4"(正しい値であると仮定します)のままです。
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 :-\
はそれ
__DATA__
セクションとは何かや、私はPOSIX正規表現を誤解していますか?
PS:タイムリーポストelsewhereにコメントで述べたように
、 "本当に空"(/^$/
)非空虚を欠場することができます
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/ ;'
これは、if/\ A \ Z/'と' if/\ A \ z/'...ですが、Python以外の言語ではかなり一貫していますが、それは問題ありません。(http://stackoverflow.com/質問/ 7063420/perl-compatible-regular-expression-pcre-in-python)を使用しています。 –
'これはamd64-freebsd'のために作られたperl 5、version 22、subversion 0(v5.22.0)です –
あなたの中心的な質問には関係ありませんが、' my $ string = "\ n"、 "foo \ n \ n" ' '$ string'に一つの改行を割り当てます。残りはカンマ演算子のために破棄されます。 – ThisSuitIsBlackNot