当前位置:  开发笔记 > 编程语言 > 正文

如何使用Perl正则表达式删除所有连字符?

如何解决《如何使用Perl正则表达式删除所有连字符?》经验,为你挑选了3个好方法。

我以为这样做了......

$rowfetch = $DBS->{Row}->GetCharValue("meetdays");
$rowfetch = /[-]/gi;
printline($rowfetch);

但似乎我错过了正则表达式语法中一个小而重要的部分.

$rowfetch 始终是这样的:

------S
-M-W---
--T-TF-

等......代表会议发生的一周中的日子



1> user54650..:
$rowfetch =~ s/-//gi

这就是你在那里的第二线所需要的.你只是找东西,而不是在没有"s"前缀的情况下改变它.

您还需要使用正则表达式运算符"=〜".



2> Kent Fredric..:

以下是您的代码目前所做的事情:

# Assign 'rowfetch' to the value fetched from:
#      The function 'GetCharValue' which is a method of: 
#         An Value in A Hash Identified by the key "Row" in:
#          Either a Hash-Ref or a Blessed Hash-Ref
#      Where 'GetCharValue' is given the parameter "meetdays"
$rowfetch = $DBS->{Row}->GetCharValue("meetdays");
# Assign $rowfetch to the number of times 
#  the default variable ( $_ ) matched the expression /[-]/ 
$rowfetch = /[-]/gi;
#  Print the number of times. 
printline($rowfetch);

这相当于编写了以下代码:

$rowfetch = ( $_ =~ /[-]/ ) 
printline( $rowfetch ); 

你正在寻找的魔力是

=~ 

令牌而不是

=

前者是Regex运算符,后者是赋值运算符.

还有许多不同的正则表达式运算符:

if( $subject =~ m/expression/  ){
}

只有当$ subject与给定表达式匹配时,才会使给定的代码块执行

$subject =~ s/foo/bar/gi 

s/所有"foo"实例替换为"bar",case-insentitively(/i),并/g在变量上重复多次替换()$subject.



3> 小智..:

使用tr运算符比使用s///正则表达式替换要快。

$rowfetch =~ tr/-//d;

基准测试:

use Benchmark qw(cmpthese);

my $s = 'foo-bar-baz-blee-goo-glab-blech';

cmpthese(-5, {
  trd => sub { (my $a = $s) =~ tr/-//d },
  sub => sub { (my $a = $s) =~ s/-//g },
});

我系统上的结果:

         Rate  sub  trd
sub  300754/s   -- -79%
trd 1429005/s 375%   --

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有