regex - 如何计算 Perl 中的字符数?

标签 regex perl charactercount

我有以下 Perl 脚本计算字符串中 Fs 和 Ts 的数量:

my $str = "GGGFFEEIIEETTGGG";
my $ft_count = 0;
$ft_count++ while($str =~ m/[FT]/g);
print "$ft_count\n";

有没有更简洁的方法来获得计数(换句话说,将第 2 行和第 3 行结合起来)?

最佳答案

my $ft_count = $str =~ tr/FT//;

perlop .

If the REPLACEMENTLIST is empty, the SEARCHLIST is replicated. This latter is useful for counting characters in a class …


  $cnt = $sky =~ tr/*/*/;     # count the stars in $sky
  $cnt = tr/0-9//;            # count the digits in $_

这是一个基准:
use strict; use warnings;

use Benchmark qw( cmpthese );

my ($x, $y) = ("GGGFFEEIIEETTGGG" x 1000) x 2;

cmpthese -5, {
    'tr' => sub {
        my $cnt = $x =~ tr/FT//;
    },
    'm' => sub {
        my $cnt = ()= $y =~ m/[FT]/g;
    },
};

速率tr m
速率 m tr
米 108/s -- -99%
tr 8118/s 7440% --

在 32 位 Windows XP 上使用 ActiveState Perl 5.10.1.1006。

区别似乎更明显

C:\Temp> c:\opt\strawberry-5.12.1\perl\bin\perl.exe t.pl
速率 m tr
米 88.8/s -- -100%
tr 25507/s 28631% --

关于regex - 如何计算 Perl 中的字符数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3813768/

相关文章:

perl - Perl 变量作用域在严格模式下的 while 循环中如何工作?

vi - 如何使用 VI 检索文件中特定字符的字符位置?

javascript - 选择以一个单词开头的一行 (javascript)

regex - 在 RAD Studio 中使用正则表达式替换文本

c# - 嵌套模式的正则表达式

JavaScript 字符串仅在开头匹配与使用indexOf 比较?

Perl 跳出 If 语句

perl - 为什么我使用SQL从Perl获得奇怪的输出?

javascript - 带负数的文本区域计数器/倒计时和强制执行

javascript - 使用 JavaScript 修改 "Span"时禁用悬停效果