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