【perl脚本】单行循环正则匹配
生活随笔
收集整理的這篇文章主要介紹了
【perl脚本】单行循环正则匹配
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
今天就沒有人能阻止我成為一名腳本工程師了!
場景
在一行字符串中循環查找匹配一類內容,并進行后續操作如替換等;
場景1:刪除一段字符串中的數字
這類找到就刪除的場景是最簡單的,直接借助g就可以搞定了:
#!/usr/bin/perl my $str = "hello 123joom, you have 988 error, 1992 warning"; my $res;$res = ($str =~ s/\d+//g); print "replace $res time: $str";打印結果:
replace 3 time: hello joom, you have error, warning場景2:把一段字符串中的數字之間加上-
這類場景的特點是,按照一定規則匹配上之后會修改變量,使之不在符合之前的規則,因此用while可破:
#!/usr/bin/perl my $str = "hello 123joom, you have 988 error, 1992 warning";while($str =~ /(.*)(\d)(\d)(.*)/){$str = $1.$2."-".$3.$4; } print "$str";打印結果:
hello 1-2-3joom, you have 9-8-8 error, 1-9-9-2 warning場景3:計算一段字符串內數字的和
這種場景下只用一個while會進入死循環,因此需要結合g來使用:
#!/usr/bin/perl my $str = "hello 123joom, you have 988 error, 1992 warning";$_ = $str; while(/\d+/g){print "get $& \n"; }打印結果:
get 123 get 988 get 1992上面那個純粹是剛開始寫的時候就這么學的,更簡單的寫法是下面這樣:
#!/usr/bin/perl my $str = "hello 123joom, you have 988 error, 1992 warning";while($str =~ /\d+/g){print "get $& \n"; }上面這段代碼的一個小瑕疵是打印不太便捷,并不是很直觀的可視,比如我想查一下為啥我的某一個值沒有匹配上打印起來就比較麻煩,因此也可以下面這種寫法:
#!/usr/bin/perl my $str = "hello 123joom, you have 988 error, 1992 warning"; my $tmp = $str; while($tmp =~ /\d+/g){$tmp = $';print "get $&, continue: $tmp \n"; }打印結果:
get 123, continue: joom, you have 988 error, 1992 warning get 988, continue: error, 1992 warning get 1992, continue: warning借助$` = 匹配之前的字符串, $& = 匹配到的字符串,$'為匹配之后的字符串這個屬性,可以比較直觀的看到循環匹配的過程。
總結
以上是生活随笔為你收集整理的【perl脚本】单行循环正则匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [html] html标签的属性值是否可
- 下一篇: 大理石在哪儿_如何创建用户体验写作课程而