在 Perl 中计算字符串中非空白字符的数量

gat*_*ina 2 regex perl

我试图弄清楚如何计算字符串中的任何和所有非空白字符,以便在下面的示例中我会得到 4 的输出。

my $str = 'A b C $'; 

my $cnt =~ /\S/g;  

print "Char Count: $cnt\n";
Run Code Online (Sandbox Code Playgroud)

是否有一个Perl的快捷方式来计算的字符串匹配的数量?不回答我的问题。

perl -e 'my $str = "A b C"; my $cnt = () = $str =~ /\./gi;  print "Chs: $cnt\n";'
Chs: 0
Run Code Online (Sandbox Code Playgroud)

有人一直想说这个问题是这个问题的重复:是否有 Perl 快捷方式来计算字符串中的匹配数?

但是,另一个问题涉及如何匹配特定字符,在他们的情况下,我认为它是一个点。我查看了许多其他寻求匹配特定字符的示例,但无法让它们匹配除空格之外的所有字符。

这不能回答我的问题。

$string = "ThisXlineXhasXsomeXx'sXinXit";
$count = ($string =~ tr/X//);
print "There are $count X characters in the string";
Run Code Online (Sandbox Code Playgroud)

这个问题:\S、\W、\D 在正则表达式中代表什么?仅定义了各种 Perl 通配符运算符——其中一个(\S 运算符)我试图在我的原始问题中使用但无济于事。然而,它没有演示如何实际使用这些运算符之一来获取字符串中所有非空白字符的计数。

too*_*lic 6

perlfaq4 (如何计算字符串中子字符串的出现次数?)

另一个版本在列表上下文中使用全局匹配,然后将结果分配给标量,生成匹配数量的计数。

您还可以从命令行查询 Perl 文档:

perldoc -q count

use warnings;
use strict;

my $str = 'A b C $'; 
my $cnt = () = $str =~ /\S/g;
print "Char Count: $cnt\n";
Run Code Online (Sandbox Code Playgroud)